From 839fe095c100ce174731e1e9453fe038d6509f1b Mon Sep 17 00:00:00 2001 From: si458 Date: Mon, 24 Nov 2025 21:14:05 +0000 Subject: [PATCH] add linux network speed using /sys/class/net/*/speed #7354 Signed-off-by: si458 --- agents/meshcore.js | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/agents/meshcore.js b/agents/meshcore.js index 36ae626b..64054238 100644 --- a/agents/meshcore.js +++ b/agents/meshcore.js @@ -5297,6 +5297,38 @@ function processConsoleCommand(cmd, args, rights, sessionid) { } case 'netinfo': { // Show network interface information var interfaces = require('os').networkInterfaces(); + if (process.platform == 'win32') { + try { + var ret = require('win-wmi').query('ROOT\\CIMV2', 'SELECT InterfaceIndex,NetConnectionID,Speed FROM Win32_NetworkAdapter', ['InterfaceIndex','NetConnectionID','Speed']); + if (ret[0]) { + var speedMap = {}; + for (var i = 0; i < ret.length; i++) speedMap[ret[i].InterfaceIndex] = ret[i].Speed; + var adapterNames = Object.keys(interfaces); + for (var j = 0; j < adapterNames.length; j++) { + var theinterfaces = interfaces[adapterNames[j]]; + for (var k = 0; k < theinterfaces.length; k++) { + var iface = theinterfaces[k], speed = speedMap[iface.index] || 0; + iface.speed = parseInt(speed); // bits per seconds + } + } + } + } catch(ex) { } + } else if (process.platform == 'linux') { + var adapterNames = Object.keys(interfaces); + for (var i = 0; i < adapterNames.length; i++) { + var ifaceName = adapterNames[i]; + try { + var speedStr = require('fs').readFileSync('/sys/class/net/' + ifaceName + '/speed').toString(); + if ((speedStr.trim() != "") && (speedStr.trim() != "-1")) { + var theinterfaces = interfaces[ifaceName]; + for (var k = 0; k < theinterfaces.length; k++) { + var iface = theinterfaces[k]; + iface.speed = parseInt(speedStr) * 1000000; // bits per seconds + } + } + } catch(ex) { } + } + } response = objToString(interfaces, 0, ' ', true); break; } @@ -6008,6 +6040,21 @@ function sendNetworkUpdate(force) { } } } catch(ex) { } + } else if (process.platform == 'linux') { + var adapterNames = Object.keys(netInfo.netif2); + for (var i = 0; i < adapterNames.length; i++) { + var ifaceName = adapterNames[i]; + try { + var speedStr = require('fs').readFileSync('/sys/class/net/' + ifaceName + '/speed').toString(); + if ((speedStr.trim() != "") && (speedStr.trim() != "-1")) { + var theinterfaces = netInfo.netif2[ifaceName]; + for (var k = 0; k < theinterfaces.length; k++) { + var iface = theinterfaces[k]; + iface.speed = parseInt(speedStr) * 1000000; // bits per seconds + } + } + } catch(ex) { } + } } if (netInfo.netif2) { netInfo.action = 'netinfo';