More network interface up fix

This commit is contained in:
2026-01-10 14:29:49 +00:00
parent c8d7665b77
commit 2ec1fed6ce
2 changed files with 15 additions and 5 deletions
+3 -3
View File
@@ -181,8 +181,8 @@ namespace display::ui::hostblock
int by = cursorY + int by = cursorY +
row * (config.hostblock.networks.height + config.hostblock.networks.gap_v); 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_rx = std::clamp(network.rxBps / std::max(network.rxMaxBps, 1048576.0f), 0.0f, 1.0f);
float value_tx = std::clamp(network.txBps / network.txMaxBps, 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, by, value_rx, 0, network.online && online, true);
netBar.draw(fb, bx + config.hostblock.networks.width, by, value_tx, 0, network.online && online); 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, text.drawTextOutlined(fb,
bx + config.hostblock.networks.font.padding, bx + config.hostblock.networks.font.padding,
by + 8, 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, network.online && online ? display::ui::theme::text::TEXT : display::ui::theme::text::OFFLINE,
display::ui::theme::text::OUTLINE, display::ui::theme::text::OUTLINE,
display::ui::text::Font{config.hostblock.networks.font.name, config.hostblock.networks.font.size}); display::ui::text::Font{config.hostblock.networks.font.name, config.hostblock.networks.font.size});
+12 -2
View File
@@ -331,6 +331,18 @@ namespace metrics
bool Collector::isInterfaceOnline(const std::string &iface) 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); int fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0) if (fd < 0)
return false; return false;
@@ -340,9 +352,7 @@ namespace metrics
bool online = false; bool online = false;
if (ioctl(fd, SIOCGIFFLAGS, &ifr) == 0) if (ioctl(fd, SIOCGIFFLAGS, &ifr) == 0)
{
online = (ifr.ifr_flags & IFF_UP) != 0; online = (ifr.ifr_flags & IFF_UP) != 0;
}
close(fd); close(fd);
return online; return online;