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>
This commit is contained in:
parent
a1047f55b8
commit
a818425d1c
5 changed files with 10 additions and 6 deletions
|
@ -2083,8 +2083,9 @@ static int hostapd_ctrl_iface_track_sta_list(struct hostapd_data *hapd,
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
os_reltime_sub(&now, &info->last_seen, &age);
|
os_reltime_sub(&now, &info->last_seen, &age);
|
||||||
ret = os_snprintf(pos, end - pos, MACSTR " %u\n",
|
ret = os_snprintf(pos, end - pos, MACSTR " %u %d\n",
|
||||||
MAC2STR(info->addr), (unsigned int) age.sec);
|
MAC2STR(info->addr), (unsigned int) age.sec,
|
||||||
|
info->ssi_signal);
|
||||||
if (os_snprintf_error(end - pos, ret))
|
if (os_snprintf_error(end - pos, ret))
|
||||||
break;
|
break;
|
||||||
pos += ret;
|
pos += ret;
|
||||||
|
|
|
@ -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;
|
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_del(&info->list);
|
||||||
dl_list_add_tail(&iface->sta_seen, &info->list);
|
dl_list_add_tail(&iface->sta_seen, &info->list);
|
||||||
os_get_reltime(&info->last_seen);
|
os_get_reltime(&info->last_seen);
|
||||||
|
info->ssi_signal = ssi_signal;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -642,6 +643,7 @@ void sta_track_add(struct hostapd_iface *iface, const u8 *addr)
|
||||||
return;
|
return;
|
||||||
os_memcpy(info->addr, addr, ETH_ALEN);
|
os_memcpy(info->addr, addr, ETH_ALEN);
|
||||||
os_get_reltime(&info->last_seen);
|
os_get_reltime(&info->last_seen);
|
||||||
|
info->ssi_signal = ssi_signal;
|
||||||
|
|
||||||
if (iface->num_sta_seen >= iface->conf->track_sta_max_num) {
|
if (iface->num_sta_seen >= iface->conf->track_sta_max_num) {
|
||||||
/* Expire oldest entry to make room for a new one */
|
/* Expire oldest entry to make room for a new one */
|
||||||
|
@ -717,7 +719,7 @@ void handle_probe_req(struct hostapd_data *hapd,
|
||||||
return;
|
return;
|
||||||
ie = ((const u8 *) mgmt) + IEEE80211_HDRLEN;
|
ie = ((const u8 *) mgmt) + IEEE80211_HDRLEN;
|
||||||
if (hapd->iconf->track_sta_max_num)
|
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;
|
ie_len = len - IEEE80211_HDRLEN;
|
||||||
|
|
||||||
for (i = 0; hapd->probereq_cb && i < hapd->num_probereq_cb; i++)
|
for (i = 0; hapd->probereq_cb && i < hapd->num_probereq_cb; i++)
|
||||||
|
|
|
@ -21,7 +21,7 @@ int ieee802_11_update_beacons(struct hostapd_iface *iface);
|
||||||
int ieee802_11_build_ap_params(struct hostapd_data *hapd,
|
int ieee802_11_build_ap_params(struct hostapd_data *hapd,
|
||||||
struct wpa_driver_ap_params *params);
|
struct wpa_driver_ap_params *params);
|
||||||
void ieee802_11_free_ap_params(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_del(struct hostapd_sta_info *info);
|
||||||
void sta_track_expire(struct hostapd_iface *iface, int force);
|
void sta_track_expire(struct hostapd_iface *iface, int force);
|
||||||
struct hostapd_data *
|
struct hostapd_data *
|
||||||
|
|
|
@ -311,6 +311,7 @@ struct hostapd_sta_info {
|
||||||
struct dl_list list;
|
struct dl_list list;
|
||||||
u8 addr[ETH_ALEN];
|
u8 addr[ETH_ALEN];
|
||||||
struct os_reltime last_seen;
|
struct os_reltime last_seen;
|
||||||
|
int ssi_signal;
|
||||||
#ifdef CONFIG_TAXONOMY
|
#ifdef CONFIG_TAXONOMY
|
||||||
struct wpabuf *probe_ie_taxonomy;
|
struct wpabuf *probe_ie_taxonomy;
|
||||||
#endif /* CONFIG_TAXONOMY */
|
#endif /* CONFIG_TAXONOMY */
|
||||||
|
|
|
@ -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)
|
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) {
|
switch (stype) {
|
||||||
case WLAN_FC_STYPE_AUTH:
|
case WLAN_FC_STYPE_AUTH:
|
||||||
|
|
Loading…
Reference in a new issue