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';