wifi-scripts: iwinfo: add null checks for rx/tx bitrate
authorSean Khan <datapronix@protonmail.com>
Wed, 19 Feb 2025 05:28:07 +0000 (00:28 -0500)
committerJohn Crispin <john@phrozen.org>
Wed, 19 Feb 2025 07:07:20 +0000 (08:07 +0100)
On some devices, the rx/tx bitrate may not always be available
right away, or at all when in mesh mode at plink is blocked causing
the following:

```
Reference error: left-hand side expression is null
In assoclist(), file /usr/share/ucode/iwinfo.uc, line 321, byte 46:
  called from function info (/usr/share/ucode/iwinfo.uc:427:33)
  called from anonymous function (/usr/bin/iwinfo:108:25)

 `                bitrate_raw: station.sta_info.tx_bitrate.bitrate,`
  Near here -----------------------------------------------^
Reference error: left-hand side expression is null
In assoclist(), file /usr/share/ucode/iwinfo.uc, line 314, byte 54:
  called from function info (/usr/share/ucode/iwinfo.uc:427:33)
  called from anonymous function (/usr/bin/iwinfo:108:25)

 `                bitrate: format_rate(station.sta_info.rx_bitrate.bitrate),`
  Near here -------------------------------------------------------^
Reference error: left-hand side expression is null
In assoc_flags(), file /usr/share/ucode/iwinfo.uc, line 216, byte 12:
  called from function assoclist (/usr/share/ucode/iwinfo.uc:323:51)
  called from function info (/usr/share/ucode/iwinfo.uc:427:33)
  called from anonymous function (/usr/bin/iwinfo:108:25)

 `        if (data[k])`
  Near here -------^
```

This was seen on Linksys MX5300 in mesh mode (QCA9984).

Signed-off-by: Sean Khan <datapronix@protonmail.com>
Link: https://github.com/openwrt/openwrt/pull/18027
Signed-off-by: John Crispin <john@phrozen.org>
package/network/config/wifi-scripts/files-ucode/usr/share/ucode/iwinfo.uc

index 4ce45b21f1cd14eb480d5d7cacd5ab38abed44ee..ff878cfebb7372d8f93489a2caddd4c2bed4fec8 100644 (file)
@@ -311,16 +311,16 @@ export function assoclist(dev) {
                        snr: station.sta_info.signal_avg - ifaces[dev].noise,
                        inactive_time: station.sta_info.inactive_time,
                        rx: {
-                               bitrate: format_rate(station.sta_info.rx_bitrate.bitrate),
-                               bitrate_raw: station.sta_info.rx_bitrate.bitrate,
-                               packets: station.sta_info.rx_packets,
-                               flags: assoc_flags(station.sta_info.rx_bitrate),
+                               bitrate: format_rate(station.sta_info.rx_bitrate?.bitrate ?? 0),
+                               bitrate_raw: station.sta_info.rx_bitrate?.bitrate ?? 0,
+                               packets: station.sta_info.rx_packets ?? 0,
+                               flags: assoc_flags(station.sta_info.rx_bitrate ?? {}),
                        },
                        tx: {
-                               bitrate: format_rate(station.sta_info.tx_bitrate.bitrate),
-                               bitrate_raw: station.sta_info.tx_bitrate.bitrate,
-                               packets: station.sta_info.tx_packets,
-                               flags: assoc_flags(station.sta_info.tx_bitrate),
+                               bitrate: format_rate(station.sta_info.tx_bitrate?.bitrate ?? 0),
+                               bitrate_raw: station.sta_info.tx_bitrate?.bitrate ?? 0,
+                               packets: station.sta_info.tx_packets ?? 0,
+                               flags: assoc_flags(station.sta_info.tx_bitrate ?? {}),
                        },
                        expected_throughput: station.sta_info.expected_throughput ?? 'unknown',
                };