From 9578329874b3ad679b9da97a2603b218c5e42d5e Mon Sep 17 00:00:00 2001 From: Andrei Otcheretianski Date: Sat, 22 Jun 2013 11:59:29 +0300 Subject: [PATCH] Add AVG_RSSI report in signal_poll Add AVG_RSSI report to the signal_poll command if it is reported by the kernel. Signed-hostap: Andrei Otcheretianski Signed-hostap: Ilan Peer --- src/drivers/driver.h | 1 + src/drivers/driver_nl80211.c | 7 +++++++ wpa_supplicant/ctrl_iface.c | 8 ++++++++ 3 files changed, 16 insertions(+) diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 8da99e64c..2dde0528c 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -1108,6 +1108,7 @@ struct wpa_signal_info { u32 frequency; int above_threshold; int current_signal; + int avg_signal; int current_noise; int current_txrate; enum chan_width chanwidth; diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index 5a4f4a94f..f705a0c47 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -1880,6 +1880,7 @@ static int get_link_signal(struct nl_msg *msg, void *arg) struct nlattr *sinfo[NL80211_STA_INFO_MAX + 1]; static struct nla_policy policy[NL80211_STA_INFO_MAX + 1] = { [NL80211_STA_INFO_SIGNAL] = { .type = NLA_U8 }, + [NL80211_STA_INFO_SIGNAL_AVG] = { .type = NLA_U8 }, }; struct nlattr *rinfo[NL80211_RATE_INFO_MAX + 1]; static struct nla_policy rate_policy[NL80211_RATE_INFO_MAX + 1] = { @@ -1902,6 +1903,12 @@ static int get_link_signal(struct nl_msg *msg, void *arg) sig_change->current_signal = (s8) nla_get_u8(sinfo[NL80211_STA_INFO_SIGNAL]); + if (sinfo[NL80211_STA_INFO_SIGNAL_AVG]) + sig_change->avg_signal = + (s8) nla_get_u8(sinfo[NL80211_STA_INFO_SIGNAL_AVG]); + else + sig_change->avg_signal = 0; + if (sinfo[NL80211_STA_INFO_TX_BITRATE]) { if (nla_parse_nested(rinfo, NL80211_RATE_INFO_MAX, sinfo[NL80211_STA_INFO_TX_BITRATE], diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c index 0c81ed3b9..a9c771546 100644 --- a/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c @@ -5060,6 +5060,14 @@ static int wpa_supplicant_signal_poll(struct wpa_supplicant *wpa_s, char *buf, pos += ret; } + if (si.avg_signal) { + ret = os_snprintf(pos, end - pos, + "AVG_RSSI=%d\n", si.avg_signal); + if (ret < 0 || ret >= end - pos) + return -1; + pos += ret; + } + return pos - buf; }