Possible problem in ucode wifi scripts

e9hack e9hack at gmail.com
Sun Dec 15 07:57:23 PST 2024


Am 15.12.2024 um 16:01 schrieb Felix Fietkau:
> On 14.12.24 20:56, e9hack wrote:
>> Am 14.12.2024 um 12:02 schrieb Felix Fietkau:
>>> On 14.12.24 11:47, e9hack wrote:
>>>> Hi,
>>>>
>>>> it looks like that data.macaddr_base is always true even if no macaddr_base is set:
>>>
>>> Which context does this happen in - hostapd, wpa_supplicant, wdev.uc or all of the above?
>>>
>>> - Felix
>>
>> It occurs with hostapd. The mac addresses are set correctly, but the config file contains something like this:
> 
> Does this help? https://nbd.name/p/9c3a2a8f

It doesn't help. It looks like that the pipe must be create without parameter macaddr_base if it is not set:

$ diff -u iface.uc.bak iface.uc
--- iface.uc.bak        2024-12-15 16:20:43.000000000 +0100
+++ iface.uc    2024-12-15 16:32:25.657917200 +0100
@@ -180,7 +180,10 @@
  let mac_idx = 0;
  export function prepare(data, phy, num_global_macaddr, macaddr_base) {
         if (!data.macaddr) {
-               let pipe = fs.popen(`ucode /usr/share/hostap/wdev.uc ${phy} get_macaddr id=${mac_idx} num_global=${num_global_macaddr} mbssid=${data.mbssid ?? 0} macaddr_base=${macaddr_base}`);
+               let cmd = `ucode /usr/share/hostap/wdev.uc ${phy} get_macaddr id=${mac_idx} num_global=${num_global_macaddr} mbssid=${data.mbssid ?? 0}`;
+               if (macaddr_base)
+                       cmd += ` macaddr_base=${macaddr_base}`;
+               let pipe = fs.popen(cmd);

                 data.macaddr = trim(pipe.read("all"), '\n');
                 pipe.close();

  
I add some test code to common.uc:

$ diff -u common.uc.bak common.uc
--- common.uc.bak       2024-12-14 20:32:53.000000000 +0100
+++ common.uc   2024-12-15 16:18:04.000000000 +0100
@@ -204,6 +204,9 @@
                 let mbssid = int(data.mbssid ?? 0) > 0;
                 let num_global = int(data.num_global ?? 1);
                 let use_global = !mbssid && idx < num_global;
+               let len = length(data.macaddr_base);
+
+               system(`logger "====> macaddr_generate: data=${data} data.macaddr_base=${data.macaddr_base} len=${len} <===="`);

                 let base_addr = phy_sysfs_file(phy, "macaddress");
                 if (!base_addr)

iface.uc unmodified:

Sun Dec 15 16:49:06 2024 user.notice root: ====> macaddr_generate: data={ id: 0, num_global: 1, mbssid: 0, macaddr_base: null } data.macaddr_base=null len=4 <====

your proposal:

Sun Dec 15 16:50:50 2024 user.notice root: ====> macaddr_generate: data={ id: 0, num_global: 1, mbssid: 0, macaddr_base:  } data.macaddr_base= len=0 <====

my proposal:

Sun Dec 15 16:51:46 2024 user.notice root: ====> macaddr_generate: data={ id: 0, num_global: 1, mbssid: 0 } data.macaddr_base=null len=null <====

In the last one is the null a real null and not a string.

Regards,
Hartmut




More information about the openwrt-devel mailing list