diff options
author | Giampaolo Rodola <g.rodola@gmail.com> | 2022-09-19 17:40:19 +0200 |
---|---|---|
committer | Giampaolo Rodola <g.rodola@gmail.com> | 2022-09-19 17:40:19 +0200 |
commit | b88f4d839dc4d665526e91b098d018a3d796a0ac (patch) | |
tree | f0be52a40a2b7c812528c94a0d12d0322ed3e004 /psutil/_psutil_linux.c | |
parent | a3eca35f084b44185a9950b5725fe8491c91510e (diff) | |
download | psutil-b88f4d839dc4d665526e91b098d018a3d796a0ac.tar.gz |
fix #2138 (critical): re-define ethtool_cmd_speed
Diffstat (limited to 'psutil/_psutil_linux.c')
-rw-r--r-- | psutil/_psutil_linux.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/psutil/_psutil_linux.c b/psutil/_psutil_linux.c index c59050cb..64cdf0b5 100644 --- a/psutil/_psutil_linux.c +++ b/psutil/_psutil_linux.c @@ -73,6 +73,12 @@ ioprio_set(int which, int who, int ioprio) { return syscall(__NR_ioprio_set, which, who, ioprio); } +// defined in linux/ethtool.h but not always available (e.g. Android) +static inline uint32_t +psutil_ethtool_cmd_speed(const struct ethtool_cmd *ecmd) { + return (ecmd->speed_hi << 16) | ecmd->speed; +} + #define IOPRIO_CLASS_SHIFT 13 #define IOPRIO_PRIO_MASK ((1UL << IOPRIO_CLASS_SHIFT) - 1) @@ -441,7 +447,7 @@ psutil_net_if_duplex_speed(PyObject* self, PyObject* args) { duplex = ethcmd.duplex; // speed is returned from ethtool as a __u32 ranging from 0 to INT_MAX // or SPEED_UNKNOWN (-1) - uint_speed = ethtool_cmd_speed(ðcmd); + uint_speed = psutil_ethtool_cmd_speed(ðcmd); if (uint_speed == (__u32)SPEED_UNKNOWN || uint_speed > INT_MAX) { speed = 0; } |