add linux network speed using /sys/class/net/*/speed #7354

Signed-off-by: si458 <simonsmith5521@gmail.com>

si458 committed Nov 24, 2025 at 21:14 UTC 839fe095c100ce174731e1e9453fe038d6509f1b
1 file changed +47
agents/meshcore.js
+47
@@ -5297,6 +5297,38 @@ function processConsoleCommand(cmd, args, rights, sessionid) {
5297 }
5298 case 'netinfo': { // Show network interface information
5299 var interfaces = require('os').networkInterfaces();
5300 + if (process.platform == 'win32') {
5301 + try {
5302 + var ret = require('win-wmi').query('ROOT\\CIMV2', 'SELECT InterfaceIndex,NetConnectionID,Speed FROM Win32_NetworkAdapter', ['InterfaceIndex','NetConnectionID','Speed']);
5303 + if (ret[0]) {
5304 + var speedMap = {};
5305 + for (var i = 0; i < ret.length; i++) speedMap[ret[i].InterfaceIndex] = ret[i].Speed;
5306 + var adapterNames = Object.keys(interfaces);
5307 + for (var j = 0; j < adapterNames.length; j++) {
5308 + var theinterfaces = interfaces[adapterNames[j]];
5309 + for (var k = 0; k < theinterfaces.length; k++) {
5310 + var iface = theinterfaces[k], speed = speedMap[iface.index] || 0;
5311 + iface.speed = parseInt(speed); // bits per seconds
5312 + }
5313 + }
5314 + }
5315 + } catch(ex) { }
5316 + } else if (process.platform == 'linux') {
5317 + var adapterNames = Object.keys(interfaces);
5318 + for (var i = 0; i < adapterNames.length; i++) {
5319 + var ifaceName = adapterNames[i];
5320 + try {
5321 + var speedStr = require('fs').readFileSync('/sys/class/net/' + ifaceName + '/speed').toString();
5322 + if ((speedStr.trim() != "") && (speedStr.trim() != "-1")) {
5323 + var theinterfaces = interfaces[ifaceName];
5324 + for (var k = 0; k < theinterfaces.length; k++) {
5325 + var iface = theinterfaces[k];
5326 + iface.speed = parseInt(speedStr) * 1000000; // bits per seconds
5327 + }
5328 + }
5329 + } catch(ex) { }
5330 + }
5331 + }
5332 response = objToString(interfaces, 0, ' ', true);
5333 break;
5334 }
@@ -6008,6 +6040,21 @@ function sendNetworkUpdate(force) {
6040 }
6041 }
6042 } catch(ex) { }
6043 + } else if (process.platform == 'linux') {
6044 + var adapterNames = Object.keys(netInfo.netif2);
6045 + for (var i = 0; i < adapterNames.length; i++) {
6046 + var ifaceName = adapterNames[i];
6047 + try {
6048 + var speedStr = require('fs').readFileSync('/sys/class/net/' + ifaceName + '/speed').toString();
6049 + if ((speedStr.trim() != "") && (speedStr.trim() != "-1")) {
6050 + var theinterfaces = netInfo.netif2[ifaceName];
6051 + for (var k = 0; k < theinterfaces.length; k++) {
6052 + var iface = theinterfaces[k];
6053 + iface.speed = parseInt(speedStr) * 1000000; // bits per seconds
6054 + }
6055 + }
6056 + } catch(ex) { }
6057 + }
6058 }
6059 if (netInfo.netif2) {
6060 netInfo.action = 'netinfo';