Add AVG_BEACON_RSSI to SIGNAL_POLL output

If the driver reports separate signal strength average for Beacon
frames, report that in SIGNAL_POLL output.

Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2015-03-15 20:45:20 +02:00
parent 4acdc48a43
commit 74fa78b281
3 changed files with 17 additions and 0 deletions

View File

@ -1477,6 +1477,7 @@ struct wpa_signal_info {
int above_threshold; int above_threshold;
int current_signal; int current_signal;
int avg_signal; int avg_signal;
int avg_beacon_signal;
int current_noise; int current_noise;
int current_txrate; int current_txrate;
enum chan_width chanwidth; enum chan_width chanwidth;

View File

@ -1187,6 +1187,7 @@ static int get_link_signal(struct nl_msg *msg, void *arg)
static struct nla_policy policy[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] = { .type = NLA_U8 },
[NL80211_STA_INFO_SIGNAL_AVG] = { .type = NLA_U8 }, [NL80211_STA_INFO_SIGNAL_AVG] = { .type = NLA_U8 },
[NL80211_STA_INFO_BEACON_SIGNAL_AVG] = { .type = NLA_U8 },
}; };
struct nlattr *rinfo[NL80211_RATE_INFO_MAX + 1]; struct nlattr *rinfo[NL80211_RATE_INFO_MAX + 1];
static struct nla_policy rate_policy[NL80211_RATE_INFO_MAX + 1] = { static struct nla_policy rate_policy[NL80211_RATE_INFO_MAX + 1] = {
@ -1215,6 +1216,13 @@ static int get_link_signal(struct nl_msg *msg, void *arg)
else else
sig_change->avg_signal = 0; sig_change->avg_signal = 0;
if (sinfo[NL80211_STA_INFO_BEACON_SIGNAL_AVG])
sig_change->avg_beacon_signal =
(s8)
nla_get_u8(sinfo[NL80211_STA_INFO_BEACON_SIGNAL_AVG]);
else
sig_change->avg_beacon_signal = 0;
if (sinfo[NL80211_STA_INFO_TX_BITRATE]) { if (sinfo[NL80211_STA_INFO_TX_BITRATE]) {
if (nla_parse_nested(rinfo, NL80211_RATE_INFO_MAX, if (nla_parse_nested(rinfo, NL80211_RATE_INFO_MAX,
sinfo[NL80211_STA_INFO_TX_BITRATE], sinfo[NL80211_STA_INFO_TX_BITRATE],

View File

@ -6476,6 +6476,14 @@ static int wpa_supplicant_signal_poll(struct wpa_supplicant *wpa_s, char *buf,
pos += ret; pos += ret;
} }
if (si.avg_beacon_signal) {
ret = os_snprintf(pos, end - pos,
"AVG_BEACON_RSSI=%d\n", si.avg_beacon_signal);
if (os_snprintf_error(end - pos, ret))
return -1;
pos += ret;
}
return pos - buf; return pos - buf;
} }