summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Weißschuh2023-05-15 14:54:27 +0000
committerHauke Mehrtens2023-06-25 19:58:09 +0000
commitca79f64154b107f192ec3c1ba631816cb8b07922 (patch)
tree3b8f0da34ee1d4b9182cd93c668116094a796f64
parent65ea345a5bfe044b870d26e3bcdb6a0ec3ae463c (diff)
downloadiwinfo-ca79f64154b107f192ec3c1ba631816cb8b07922.tar.gz
lib: report byte counters as 64 bit values
The 32bit counter can only count to 4GiB before wrapping. Switching to the 64bit variant avoids this issue. In practice some users are interpreting the counter values as signed integer bringing down the usable range for 32bit values down to only 2GiB. Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
-rw-r--r--include/iwinfo.h4
-rw-r--r--iwinfo_nl80211.c12
2 files changed, 12 insertions, 4 deletions
diff --git a/include/iwinfo.h b/include/iwinfo.h
index eae9930..b50de69 100644
--- a/include/iwinfo.h
+++ b/include/iwinfo.h
@@ -240,8 +240,8 @@ struct iwinfo_assoclist_entry {
uint64_t rx_drop_misc;
struct iwinfo_rate_entry rx_rate;
struct iwinfo_rate_entry tx_rate;
- uint32_t rx_bytes;
- uint32_t tx_bytes;
+ uint64_t rx_bytes;
+ uint64_t tx_bytes;
uint32_t tx_retries;
uint32_t tx_failed;
uint64_t t_offset;
diff --git a/iwinfo_nl80211.c b/iwinfo_nl80211.c
index 2a5e461..2200249 100644
--- a/iwinfo_nl80211.c
+++ b/iwinfo_nl80211.c
@@ -1554,6 +1554,8 @@ static int nl80211_fill_signal_cb(struct nl_msg *msg, void *arg)
[NL80211_STA_INFO_INACTIVE_TIME] = { .type = NLA_U32 },
[NL80211_STA_INFO_RX_BYTES] = { .type = NLA_U32 },
[NL80211_STA_INFO_TX_BYTES] = { .type = NLA_U32 },
+ [NL80211_STA_INFO_RX_BYTES64] = { .type = NLA_U64 },
+ [NL80211_STA_INFO_TX_BYTES64] = { .type = NLA_U64 },
[NL80211_STA_INFO_RX_PACKETS] = { .type = NLA_U32 },
[NL80211_STA_INFO_TX_PACKETS] = { .type = NLA_U32 },
[NL80211_STA_INFO_SIGNAL] = { .type = NLA_U8 },
@@ -2214,6 +2216,8 @@ static int nl80211_get_assoclist_cb(struct nl_msg *msg, void *arg)
[NL80211_STA_INFO_SIGNAL_AVG] = { .type = NLA_U8 },
[NL80211_STA_INFO_RX_BYTES] = { .type = NLA_U32 },
[NL80211_STA_INFO_TX_BYTES] = { .type = NLA_U32 },
+ [NL80211_STA_INFO_RX_BYTES64] = { .type = NLA_U64 },
+ [NL80211_STA_INFO_TX_BYTES64] = { .type = NLA_U64 },
[NL80211_STA_INFO_TX_RETRIES] = { .type = NLA_U32 },
[NL80211_STA_INFO_TX_FAILED] = { .type = NLA_U32 },
[NL80211_STA_INFO_CONNECTED_TIME]= { .type = NLA_U32 },
@@ -2277,10 +2281,14 @@ static int nl80211_get_assoclist_cb(struct nl_msg *msg, void *arg)
sinfo[NL80211_STA_INFO_TX_BITRATE], rate_policy))
nl80211_parse_rateinfo(rinfo, &e->tx_rate);
- if (sinfo[NL80211_STA_INFO_RX_BYTES])
+ if (sinfo[NL80211_STA_INFO_RX_BYTES64])
+ e->rx_bytes = nla_get_u64(sinfo[NL80211_STA_INFO_RX_BYTES64]);
+ else if (sinfo[NL80211_STA_INFO_RX_BYTES])
e->rx_bytes = nla_get_u32(sinfo[NL80211_STA_INFO_RX_BYTES]);
- if (sinfo[NL80211_STA_INFO_TX_BYTES])
+ if (sinfo[NL80211_STA_INFO_TX_BYTES64])
+ e->tx_bytes = nla_get_u64(sinfo[NL80211_STA_INFO_TX_BYTES64]);
+ else if (sinfo[NL80211_STA_INFO_TX_BYTES])
e->tx_bytes = nla_get_u32(sinfo[NL80211_STA_INFO_TX_BYTES]);
if (sinfo[NL80211_STA_INFO_TX_RETRIES])