[openwrt/openwrt] wifi-scripts: refactor iwinfo.uc to support dynamic data updates
LEDE Commits
lede-commits at lists.infradead.org
Mon Feb 16 00:21:08 PST 2026
nbd pushed a commit to openwrt/openwrt.git, branch openwrt-25.12:
https://git.openwrt.org/8725a4713e0b28fca194447118bb06ad039592dd
commit 8725a4713e0b28fca194447118bb06ad039592dd
Author: John Crispin <john at phrozen.org>
AuthorDate: Fri Sep 19 17:05:30 2025 +0200
wifi-scripts: refactor iwinfo.uc to support dynamic data updates
Moved interface discovery and data population into an exported update()
function that can be called on-demand to refresh wireless interface
information. This allows using iwinfo.uc as a library inside daemons.
Signed-off-by: John Crispin <john at phrozen.org>
(cherry picked from commit 26eab84f81ad0fa8018c950530d5c7a7b0a3b5d7)
---
.../files-ucode/usr/share/ucode/iwinfo.uc | 78 ++++++++++++----------
1 file changed, 44 insertions(+), 34 deletions(-)
diff --git a/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc b/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc
index 9926d420e7..35b9f646c7 100644
--- a/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc
+++ b/package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc
@@ -8,11 +8,11 @@ let wifi_devices = json(readfile('/usr/share/wifi_devices.json'));
let countries = json(readfile('/usr/share/iso3166.json'));
let board_data = json(readfile('/etc/board.json'));
-export let phys = nl80211.request(nl80211.const.NL80211_CMD_GET_WIPHY, nl80211.const.NLM_F_DUMP, { split_wiphy_dump: true });
-let interfaces = nl80211.request(nl80211.const.NL80211_CMD_GET_INTERFACE, nl80211.const.NLM_F_DUMP);
-
let ubus = libubus.connect();
-let wireless_status = ubus.call('network.wireless', 'status');
+
+export let phys;
+let interfaces;
+let wireless_status;
function find_phy(wiphy) {
for (let k, phy in phys)
@@ -93,39 +93,47 @@ const iftypes = [
];
export let ifaces = {};
-for (let k, v in interfaces) {
- let iface = ifaces[v.ifname] = v;
-
- iface.mode = iftypes[iface.iftype] ?? 'unknown',
- iface.noise = get_noise(iface);
- iface.country = get_country(iface);
- iface.max_power = get_max_power(iface);
- iface.assoclist = nl80211.request(nl80211.const.NL80211_CMD_GET_STATION, nl80211.const.NLM_F_DUMP, { dev: v.ifname }) ?? [];
- iface.hardware = get_hardware_id(iface);
-
- iface.bss_info = ubus.call('hostapd', 'bss_info', { iface: v.ifname });
- if (!iface.bss_info)
- iface.bss_info = ubus.call('wpa_supplicant', 'bss_info', { iface: v.ifname });
-}
-for (let radio, data in wireless_status)
- for (let k, v in data.interfaces) {
- if (!v.ifname || !ifaces[v.ifname])
- continue;
+export function update() {
+ phys = nl80211.request(nl80211.const.NL80211_CMD_GET_WIPHY, nl80211.const.NLM_F_DUMP, { split_wiphy_dump: true });
+ interfaces = nl80211.request(nl80211.const.NL80211_CMD_GET_INTERFACE, nl80211.const.NLM_F_DUMP);
+ wireless_status = ubus.call('network.wireless', 'status');
+
+ ifaces = {};
+ for (let k, v in interfaces) {
+ let iface = ifaces[v.ifname] = v;
+
+ iface.mode = iftypes[iface.iftype] ?? 'unknown',
+ iface.noise = get_noise(iface);
+ iface.country = get_country(iface);
+ iface.max_power = get_max_power(iface);
+ iface.assoclist = nl80211.request(nl80211.const.NL80211_CMD_GET_STATION, nl80211.const.NLM_F_DUMP, { dev: v.ifname }) ?? [];
+ iface.hardware = get_hardware_id(iface);
+
+ iface.bss_info = ubus.call('hostapd', 'bss_info', { iface: v.ifname });
+ if (!iface.bss_info)
+ iface.bss_info = ubus.call('wpa_supplicant', 'bss_info', { iface: v.ifname });
+ }
- ifaces[v.ifname].ssid = v.config.ssid || v.config.mesh_id;
- ifaces[v.ifname].radio = data.config;
-
- let bss_info = ifaces[v.ifname].bss_info;
- let owe_transition_ifname = bss_info?.owe_transition_ifname;
-
- if (v.config.owe_transition && ifaces[owe_transition_ifname]) {
- ifaces[v.ifname].owe_transition_ifname = owe_transition_ifname;
- ifaces[owe_transition_ifname].ssid = v.config.ssid;
- ifaces[owe_transition_ifname].radio = data.config;
- ifaces[owe_transition_ifname].owe_transition_ifname = v.ifname
+ for (let radio, data in wireless_status)
+ for (let k, v in data.interfaces) {
+ if (!v.ifname || !ifaces[v.ifname])
+ continue;
+
+ ifaces[v.ifname].ssid = v.config.ssid || v.config.mesh_id;
+ ifaces[v.ifname].radio = data.config;
+
+ let bss_info = ifaces[v.ifname].bss_info;
+ let owe_transition_ifname = bss_info?.owe_transition_ifname;
+
+ if (v.config.owe_transition && ifaces[owe_transition_ifname]) {
+ ifaces[v.ifname].owe_transition_ifname = owe_transition_ifname;
+ ifaces[owe_transition_ifname].ssid = v.config.ssid;
+ ifaces[owe_transition_ifname].radio = data.config;
+ ifaces[owe_transition_ifname].owe_transition_ifname = v.ifname
+ }
}
- }
+};
function format_channel(freq) {
if (freq < 1000)
@@ -674,3 +682,5 @@ export function scan(dev) {
return cells;
};
+
+update();
More information about the lede-commits
mailing list