mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-10 07:44:50 +01:00
133 lines
4.8 KiB
JavaScript
133 lines
4.8 KiB
JavaScript
/*
|
|
* Copyright (c) 2025 Genexis B.V. All rights reserved.
|
|
*
|
|
* This Software and its content are protected by the Dutch Copyright Act
|
|
* ('Auteurswet'). All and any copying and distribution of the software
|
|
* and its content without authorization by Genexis B.V. is
|
|
* prohibited. The prohibition includes every form of reproduction and
|
|
* distribution.
|
|
*
|
|
*/
|
|
|
|
import * as std from 'std';
|
|
import { isTrue } from '../utils.js';
|
|
import { getUciByType } from '../uci.js';
|
|
|
|
function setMgmtPortLowerLayers(bri) {
|
|
if (!bri) return 0;
|
|
|
|
const portPath = `Device.Bridging.Bridge.${bri['.index']}.Port.`;
|
|
const mgmtPort = _dm_instances(portPath, '(ManagementPort="true" OR ManagementPort=1)');
|
|
if (mgmtPort.length !== 1) return 0;
|
|
|
|
const nonMgmtPort = _dm_instances(portPath, '(ManagementPort="false" OR ManagementPort=0)');
|
|
_dm_update(`${mgmtPort[0]}.LowerLayers`, nonMgmtPort.join(','));
|
|
return 0;
|
|
}
|
|
|
|
export function changedDeviceBridgingBridgePort(bri) {
|
|
return setMgmtPortLowerLayers(bri);
|
|
}
|
|
|
|
export function changedDeviceBridgingBridgePortManagementPort(bri) {
|
|
return setMgmtPortLowerLayers(bri);
|
|
}
|
|
|
|
export function getDeviceBridgingBridgeStatus(bri) {
|
|
const enable = _dm_get(`Device.Bridging.Bridge.${bri['.index']}.Enable`);
|
|
return enable ? 'Enabled' : 'Disabled';
|
|
}
|
|
|
|
export function getDeviceBridgingBridgeSTPStatus(bri) {
|
|
const stpState = std.loadFile(`/sys/class/net/${bri.Name}/bridge/stp_state`)?.trim();
|
|
return stpState === '1' ? 'Enabled' : 'Disabled';
|
|
}
|
|
|
|
export function getDeviceBridgingBridgePortStatus(bri, port) {
|
|
if (!port['.db']) return 'Up';
|
|
|
|
const enable = _dm_get(`Device.Bridging.Bridge.${bri['.index']}.Port.${port['.index']}.Enable`);
|
|
return enable ? 'Up' : 'Down';
|
|
}
|
|
|
|
export function infoDeviceBridgingBridgePort(path, port) {
|
|
const mgmtPort = _dm_get(`${path}.ManagementPort`);
|
|
if (typeof mgmtPort === 'undefined' || mgmtPort) return;
|
|
|
|
const lower = _dm_get(`${path}.LowerLayers`);
|
|
if (lower) {
|
|
port.ifname = _dm_linker_value(lower);
|
|
}
|
|
}
|
|
|
|
// Helper function to read network statistics
|
|
function getNetworkStat(port, statName) {
|
|
return std.loadFile(`/sys/class/net/${port.ifname}/statistics/${statName}`)?.trim();
|
|
}
|
|
|
|
export const getDeviceBridgingBridgePortStatsBytesSent = (bri, port) =>
|
|
getNetworkStat(port, 'tx_bytes');
|
|
|
|
export const getDeviceBridgingBridgePortStatsBytesReceived = (bri, port) =>
|
|
getNetworkStat(port, 'rx_bytes');
|
|
|
|
export const getDeviceBridgingBridgePortStatsPacketsSent = (bri, port) =>
|
|
getNetworkStat(port, 'tx_packets');
|
|
|
|
export const getDeviceBridgingBridgePortStatsPacketsReceived = (bri, port) =>
|
|
getNetworkStat(port, 'rx_packets');
|
|
|
|
export const getDeviceBridgingBridgePortStatsErrorsSent = (bri, port) =>
|
|
getNetworkStat(port, 'tx_errors');
|
|
|
|
export const getDeviceBridgingBridgePortStatsErrorsReceived = (bri, port) =>
|
|
getNetworkStat(port, 'rx_errors');
|
|
|
|
export const getDeviceBridgingBridgePortStatsDiscardPacketsSent = (bri, port) =>
|
|
getNetworkStat(port, 'tx_dropped');
|
|
|
|
export const getDeviceBridgingBridgePortStatsDiscardPacketsReceived = (bri, port) =>
|
|
getNetworkStat(port, 'rx_dropped');
|
|
|
|
export const getDeviceBridgingBridgePortStatsMulticastPacketsReceived = (bri, port) =>
|
|
getNetworkStat(port, 'multicast');
|
|
|
|
export const getDeviceBridgingBridgePortStatsUnicastPacketsSent = (bri, port) =>
|
|
getNetworkStat(port, 'tx_unicast_packets');
|
|
|
|
export const getDeviceBridgingBridgePortStatsUnicastPacketsReceived = (bri, port) =>
|
|
getNetworkStat(port, 'rx_unicast_packets');
|
|
|
|
export const getDeviceBridgingBridgePortStatsMulticastPacketsSent = (bri, port) =>
|
|
getNetworkStat(port, 'tx_multicast_packets');
|
|
|
|
export const getDeviceBridgingBridgePortStatsBroadcastPacketsSent = (bri, port) =>
|
|
getNetworkStat(port, 'tx_broadcast_packets');
|
|
|
|
export const getDeviceBridgingBridgePortStatsBroadcastPacketsReceived = (bri, port) =>
|
|
getNetworkStat(port, 'rx_broadcast_packets');
|
|
|
|
export const getDeviceBridgingBridgePortStatsUnknownProtoPacketsReceived = (bri, port) =>
|
|
getNetworkStat(port, 'rx_unknown_packets');
|
|
|
|
export function getDeviceBridgingBridgePort(bri) {
|
|
const networkName = bri.Name.startsWith('br-') ? bri.Name.slice(3) : bri.Name;
|
|
|
|
const wifiIfaces = getUciByType('wireless', 'wifi-iface', { match: { multi_ap: '2', network: networkName } });
|
|
wifiIfaces?.forEach(x => {
|
|
const ssid = getUciByType('WiFi', 'SSID',
|
|
{ match: { device: x.device, ssid: x.ssid}, confdir: '/etc/bbfdm/dmmap'});
|
|
if (Array.isArray(ssid) && ssid[0].__instance__) {
|
|
x.ssidPath = `Device.WiFi.SSID.${ssid[0].__instance__}`;
|
|
}
|
|
});
|
|
|
|
return wifiIfaces;
|
|
}
|
|
|
|
export function setDeviceBridgingBridgePortManagementPort(val, bri, port) {
|
|
if (isTrue(val)) {
|
|
_db_set(`Device.Bridging.Bridge.${bri['.index']}.Port.${port['.index']}.Name`, bri.Name);
|
|
}
|
|
return 1;
|
|
}
|