-
Jiri Popelka authored
When an interface has transferred exbibytes (> 0.8 EiB, i.e. > 819 PiB) of traffic, the short display is rounded incorrectly. For example: bytes 2154408931384050514 (275.0 PiB) while correct is (1913.4 PiB) This happens because we times the rx/tx bytes values by 10, then calculate the short version from that result: lib/interface.c:ife_print_long() tx = ptr->stats.tx_bytes; short_tx = tx * 10; if (tx > 1125899906842624ull) { short_tx /= 1125899906842624ull; Text = "PiB"; } But multiplying anything more than 819 PiB by 10 overflows a ull which is a uint64_t (max value of 9223372036854775807). We'll never get accuracy over 8192 PiB (2^64) when using ull, but we can at least correctly handle values between 819 - 8192 PiB.
e5f1be13