]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
nl80211: Fetch STA TX/RX duration statistics
authorToke Høiland-Jørgensen <toke@toke.dk>
Wed, 20 Mar 2019 14:58:52 +0000 (15:58 +0100)
committerJouni Malinen <j@w1.fi>
Tue, 30 Apr 2019 09:34:58 +0000 (12:34 +0300)
This makes per-STA TX/RX duration statistics available for airtime policy
configuration.

Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
src/drivers/driver.h
src/drivers/driver_nl80211.c

index fdf9d197b402269057ddc75a7b2821548caa4d78..351622afcdf74e2bc9c9175089c55c35223c59be 100644 (file)
@@ -1759,6 +1759,7 @@ struct hostapd_data;
 struct hostap_sta_driver_data {
        unsigned long rx_packets, tx_packets;
        unsigned long long rx_bytes, tx_bytes;
+       unsigned long long rx_airtime, tx_airtime;
        int bytes_64bit; /* whether 64-bit byte counters are supported */
        unsigned long current_tx_rate;
        unsigned long current_rx_rate;
index ff97720b241c833d16fc6f9c36cad0b03834e3b7..090f74ecc30e515724a141222c42c7e12e86dd14 100644 (file)
@@ -6309,6 +6309,8 @@ static int get_sta_handler(struct nl_msg *msg, void *arg)
                [NL80211_STA_INFO_TX_BYTES64] = { .type = NLA_U64 },
                [NL80211_STA_INFO_SIGNAL] = { .type = NLA_U8 },
                [NL80211_STA_INFO_ACK_SIGNAL] = { .type = NLA_U8 },
+               [NL80211_STA_INFO_RX_DURATION] = { .type = NLA_U64 },
+               [NL80211_STA_INFO_TX_DURATION] = { .type = NLA_U64 },
        };
        struct nlattr *rate[NL80211_RATE_INFO_MAX + 1];
        static struct nla_policy rate_policy[NL80211_RATE_INFO_MAX + 1] = {
@@ -6366,6 +6368,12 @@ static int get_sta_handler(struct nl_msg *msg, void *arg)
        if (stats[NL80211_STA_INFO_TX_PACKETS])
                data->tx_packets =
                        nla_get_u32(stats[NL80211_STA_INFO_TX_PACKETS]);
+       if (stats[NL80211_STA_INFO_RX_DURATION])
+               data->rx_airtime =
+                       nla_get_u64(stats[NL80211_STA_INFO_RX_DURATION]);
+       if (stats[NL80211_STA_INFO_TX_DURATION])
+               data->tx_airtime =
+                       nla_get_u64(stats[NL80211_STA_INFO_TX_DURATION]);
        if (stats[NL80211_STA_INFO_TX_FAILED])
                data->tx_retry_failed =
                        nla_get_u32(stats[NL80211_STA_INFO_TX_FAILED]);