summaryrefslogtreecommitdiff
path: root/psutil/_psutil_linux.c
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2022-09-19 17:40:19 +0200
committerGiampaolo Rodola <g.rodola@gmail.com>2022-09-19 17:40:19 +0200
commitb88f4d839dc4d665526e91b098d018a3d796a0ac (patch)
treef0be52a40a2b7c812528c94a0d12d0322ed3e004 /psutil/_psutil_linux.c
parenta3eca35f084b44185a9950b5725fe8491c91510e (diff)
downloadpsutil-b88f4d839dc4d665526e91b098d018a3d796a0ac.tar.gz
fix #2138 (critical): re-define ethtool_cmd_speed
Diffstat (limited to 'psutil/_psutil_linux.c')
-rw-r--r--psutil/_psutil_linux.c8
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(&ethcmd);
+ uint_speed = psutil_ethtool_cmd_speed(&ethcmd);
if (uint_speed == (__u32)SPEED_UNKNOWN || uint_speed > INT_MAX) {
speed = 0;
}