hostapd: Add last_ack_rssi into ctrl iface cmd STA

This allows external application to get last ACK signal strength of the
last transmitted frame if the driver makes this information
(NL80211_STA_INFO_ACK_SIGNAL) available.

Signed-off-by: Bhagavathi Perumal S <bperumal@codeaurora.org>
Signed-off-by: Venkateswara Naralasetty <vnaralas@codeaurora.org>
This commit is contained in:
Bhagavathi Perumal S 2018-03-06 14:30:11 +05:30 committed by Jouni Malinen
parent 2df73f52e8
commit 72123a84cb
3 changed files with 15 additions and 2 deletions

View file

@ -153,6 +153,13 @@ static int hostapd_get_sta_tx_rx(struct hostapd_data *hapd,
supported_mcs_set); supported_mcs_set);
} }
if (data.flags & STA_DRV_DATA_LAST_ACK_RSSI) {
ret = os_snprintf(buf + len, buflen - len,
"last_ack_signal=%d\n", data.last_ack_rssi);
if (!os_snprintf_error(buflen - len, ret))
len += ret;
}
return len; return len;
} }

View file

@ -1694,6 +1694,7 @@ struct hostapd_data;
#define STA_DRV_DATA_RX_VHT_NSS BIT(5) #define STA_DRV_DATA_RX_VHT_NSS BIT(5)
#define STA_DRV_DATA_TX_SHORT_GI BIT(6) #define STA_DRV_DATA_TX_SHORT_GI BIT(6)
#define STA_DRV_DATA_RX_SHORT_GI BIT(7) #define STA_DRV_DATA_RX_SHORT_GI BIT(7)
#define STA_DRV_DATA_LAST_ACK_RSSI BIT(8)
struct hostap_sta_driver_data { struct hostap_sta_driver_data {
unsigned long rx_packets, tx_packets; unsigned long rx_packets, tx_packets;
@ -1706,8 +1707,7 @@ struct hostap_sta_driver_data {
unsigned long num_ps_buf_frames; unsigned long num_ps_buf_frames;
unsigned long tx_retry_failed; unsigned long tx_retry_failed;
unsigned long tx_retry_count; unsigned long tx_retry_count;
int last_rssi; s8 last_ack_rssi;
int last_ack_rssi;
s8 signal; s8 signal;
u8 rx_vhtmcs; u8 rx_vhtmcs;
u8 tx_vhtmcs; u8 tx_vhtmcs;

View file

@ -6049,6 +6049,7 @@ static int get_sta_handler(struct nl_msg *msg, void *arg)
[NL80211_STA_INFO_RX_BYTES64] = { .type = NLA_U64 }, [NL80211_STA_INFO_RX_BYTES64] = { .type = NLA_U64 },
[NL80211_STA_INFO_TX_BYTES64] = { .type = NLA_U64 }, [NL80211_STA_INFO_TX_BYTES64] = { .type = NLA_U64 },
[NL80211_STA_INFO_SIGNAL] = { .type = NLA_U8 }, [NL80211_STA_INFO_SIGNAL] = { .type = NLA_U8 },
[NL80211_STA_INFO_ACK_SIGNAL] = { .type = NLA_U8 },
}; };
struct nlattr *rate[NL80211_RATE_INFO_MAX + 1]; struct nlattr *rate[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] = {
@ -6111,6 +6112,11 @@ static int get_sta_handler(struct nl_msg *msg, void *arg)
nla_get_u32(stats[NL80211_STA_INFO_TX_FAILED]); nla_get_u32(stats[NL80211_STA_INFO_TX_FAILED]);
if (stats[NL80211_STA_INFO_SIGNAL]) if (stats[NL80211_STA_INFO_SIGNAL])
data->signal = nla_get_u8(stats[NL80211_STA_INFO_SIGNAL]); data->signal = nla_get_u8(stats[NL80211_STA_INFO_SIGNAL]);
if (stats[NL80211_STA_INFO_ACK_SIGNAL]) {
data->last_ack_rssi =
nla_get_u8(stats[NL80211_STA_INFO_ACK_SIGNAL]);
data->flags |= STA_DRV_DATA_LAST_ACK_RSSI;
}
if (stats[NL80211_STA_INFO_TX_BITRATE] && if (stats[NL80211_STA_INFO_TX_BITRATE] &&
nla_parse_nested(rate, NL80211_RATE_INFO_MAX, nla_parse_nested(rate, NL80211_RATE_INFO_MAX,