mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-25 00:38:24 -05:00
nl80211: Fetch STA TXQ backlog statistics
This makes per-STA TXQ backlog statistics available for airtime policy configuration. Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
This commit is contained in:
parent
6326fa0c40
commit
1d6f63854e
@ -1768,6 +1768,8 @@ struct hostap_sta_driver_data {
|
||||
unsigned long tx_retry_failed;
|
||||
unsigned long tx_retry_count;
|
||||
s8 last_ack_rssi;
|
||||
unsigned long backlog_packets;
|
||||
unsigned long backlog_bytes;
|
||||
s8 signal;
|
||||
u8 rx_vhtmcs;
|
||||
u8 tx_vhtmcs;
|
||||
|
@ -6262,6 +6262,36 @@ static int i802_flush(void *priv)
|
||||
}
|
||||
|
||||
|
||||
static void get_sta_tid_stats(struct hostap_sta_driver_data *data,
|
||||
struct nlattr *attr)
|
||||
{
|
||||
struct nlattr *tid_stats[NL80211_TID_STATS_MAX + 1], *tidattr;
|
||||
struct nlattr *txq_stats[NL80211_TXQ_STATS_MAX + 1];
|
||||
static struct nla_policy txq_stats_policy[NL80211_TXQ_STATS_MAX + 1] = {
|
||||
[NL80211_TXQ_STATS_BACKLOG_BYTES] = { .type = NLA_U32 },
|
||||
[NL80211_TXQ_STATS_BACKLOG_PACKETS] = { .type = NLA_U32 },
|
||||
};
|
||||
int rem;
|
||||
|
||||
nla_for_each_nested(tidattr, attr, rem) {
|
||||
if (nla_parse_nested(tid_stats, NL80211_TID_STATS_MAX,
|
||||
tidattr, NULL) != 0 ||
|
||||
!tid_stats[NL80211_TID_STATS_TXQ_STATS] ||
|
||||
nla_parse_nested(txq_stats, NL80211_TXQ_STATS_MAX,
|
||||
tid_stats[NL80211_TID_STATS_TXQ_STATS],
|
||||
txq_stats_policy) != 0)
|
||||
continue;
|
||||
/* sum the backlogs over all TIDs for station */
|
||||
if (txq_stats[NL80211_TXQ_STATS_BACKLOG_BYTES])
|
||||
data->backlog_bytes += nla_get_u32(
|
||||
txq_stats[NL80211_TXQ_STATS_BACKLOG_BYTES]);
|
||||
if (txq_stats[NL80211_TXQ_STATS_BACKLOG_PACKETS])
|
||||
data->backlog_bytes += nla_get_u32(
|
||||
txq_stats[NL80211_TXQ_STATS_BACKLOG_PACKETS]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static int get_sta_handler(struct nl_msg *msg, void *arg)
|
||||
{
|
||||
struct nlattr *tb[NL80211_ATTR_MAX + 1];
|
||||
@ -6406,6 +6436,9 @@ static int get_sta_handler(struct nl_msg *msg, void *arg)
|
||||
}
|
||||
}
|
||||
|
||||
if (stats[NL80211_STA_INFO_TID_STATS])
|
||||
get_sta_tid_stats(data, stats[NL80211_STA_INFO_TID_STATS]);
|
||||
|
||||
return NL_SKIP;
|
||||
}
|
||||
|
||||
@ -10904,6 +10937,7 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = {
|
||||
.sta_remove = driver_nl80211_sta_remove,
|
||||
.hapd_send_eapol = wpa_driver_nl80211_hapd_send_eapol,
|
||||
.sta_set_flags = wpa_driver_nl80211_sta_set_flags,
|
||||
.sta_set_airtime_weight = driver_nl80211_sta_set_airtime_weight,
|
||||
.hapd_init = i802_init,
|
||||
.hapd_deinit = i802_deinit,
|
||||
.set_wds_sta = i802_set_wds_sta,
|
||||
|
Loading…
Reference in New Issue
Block a user