From 2ec1fed6cebc53d4dc9a8e8fb77333ba50fb6571 Mon Sep 17 00:00:00 2001 From: Eugene Lykov Date: Sat, 10 Jan 2026 14:29:49 +0000 Subject: [PATCH] More network interface up fix --- src/display/ui/hostblock/HostBlock.cpp | 6 +++--- src/metrics/Collector.cpp | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/display/ui/hostblock/HostBlock.cpp b/src/display/ui/hostblock/HostBlock.cpp index 89addb0..6fa2d86 100644 --- a/src/display/ui/hostblock/HostBlock.cpp +++ b/src/display/ui/hostblock/HostBlock.cpp @@ -181,8 +181,8 @@ namespace display::ui::hostblock int by = cursorY + row * (config.hostblock.networks.height + config.hostblock.networks.gap_v); - float value_rx = std::clamp(network.rxBps / network.rxMaxBps, 0.0f, 1.0f); - float value_tx = std::clamp(network.txBps / network.txMaxBps, 0.0f, 1.0f); + float value_rx = std::clamp(network.rxBps / std::max(network.rxMaxBps, 1048576.0f), 0.0f, 1.0f); + float value_tx = std::clamp(network.txBps / std::max(network.txMaxBps, 1048576.0f), 0.0f, 1.0f); netBar.draw(fb, bx, by, value_rx, 0, network.online && online, true); netBar.draw(fb, bx + config.hostblock.networks.width, by, value_tx, 0, network.online && online); @@ -190,7 +190,7 @@ namespace display::ui::hostblock text.drawTextOutlined(fb, bx + config.hostblock.networks.font.padding, by + 8, - display::ui::text::formatSpeed(network.rxBps) + " " + network.name, + network.name, network.online && online ? display::ui::theme::text::TEXT : display::ui::theme::text::OFFLINE, display::ui::theme::text::OUTLINE, display::ui::text::Font{config.hostblock.networks.font.name, config.hostblock.networks.font.size}); diff --git a/src/metrics/Collector.cpp b/src/metrics/Collector.cpp index 1a8dc72..27db891 100644 --- a/src/metrics/Collector.cpp +++ b/src/metrics/Collector.cpp @@ -331,6 +331,18 @@ namespace metrics bool Collector::isInterfaceOnline(const std::string &iface) { + std::ifstream f("/sys/class/net/" + iface + "/operstate"); + if (f) + { + std::string state; + f >> state; + if (state == "up") + return true; + if (state != "unknown") + return false; + } + + // fallback: check IFF_UP int fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd < 0) return false; @@ -340,9 +352,7 @@ namespace metrics bool online = false; if (ioctl(fd, SIOCGIFFLAGS, &ifr) == 0) - { online = (ifr.ifr_flags & IFF_UP) != 0; - } close(fd); return online;