wifi-scripts: fix creation of IBSS in legacy (non-HT) mode
authorAlexandru Gagniuc <mr.nuke.me@gmail.com>
Wed, 3 Apr 2024 19:32:08 +0000 (14:32 -0500)
committerRISCi_ATOM <bob@bobcall.me>
Tue, 4 Jun 2024 15:56:21 +0000 (11:56 -0400)
When an IBBS interface is configured for IBSS legacy mode, wdev.htmode
is empty. This is empty string results in an empty positional argument
to the "ibbs join" command, for example:

    iw dev phy0-ibss0 ibss join crymesh 2412 '' fixed-freq beacon-interval 100

This empty argument is interpreted as an invalid HT mode by 'iw',
causing the entire command to fail and print a "usage" message:

    daemon.notice netifd: radio0 (4527): Usage:    iw [options] \
        dev <devname> ibss join <SSID> <freq in MHz> ...

Although nobody will ever need more than 640K of IBSS, explicitly use
"NOHT" if an HT mode is not given. This fixes the problem.

Fixes: e56c5f7b276a ("hostapd: add ucode support, use ucode for the main ubus object")
Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name> [extend to cover more cases]
(cherry picked from commit cee9fcdb7350911f474544189817d25fd4070111)

package/network/services/hostapd/files/wdev.uc

index ff4d629fd64d0eb351938c7d7a371c6b76868fc8..d505e3035ffbb2ce75250020364579f46af19ce8 100644 (file)
@@ -32,10 +32,11 @@ function iface_start(wdev)
                wdev_config.macaddr = phydev.macaddr_next();
        wdev_create(phy, ifname, wdev_config);
        wdev_set_up(ifname, true);
+       let htmode = wdev.htmode || "NOHT";
        if (wdev.freq)
-               system(`iw dev ${ifname} set freq ${wdev.freq} ${wdev.htmode}`);
+               system(`iw dev ${ifname} set freq ${wdev.freq} ${htmode}`);
        if (wdev.mode == "adhoc") {
-               let cmd = ["iw", "dev", ifname, "ibss", "join", wdev.ssid, wdev.freq, wdev.htmode, "fixed-freq" ];
+               let cmd = ["iw", "dev", ifname, "ibss", "join", wdev.ssid, wdev.freq, htmode, "fixed-freq" ];
                if (wdev.bssid)
                        push(cmd, wdev.bssid);
                for (let key in [ "beacon-interval", "basic-rates", "mcast-rate", "keys" ])
@@ -43,7 +44,7 @@ function iface_start(wdev)
                                push(cmd, key, wdev[key]);
                system(cmd);
        } else if (wdev.mode == "mesh") {
-               let cmd = [ "iw", "dev", ifname, "mesh", "join", wdev.ssid, "freq", wdev.freq, wdev.htmode ];
+               let cmd = [ "iw", "dev", ifname, "mesh", "join", wdev.ssid, "freq", wdev.freq, htmode ];
                for (let key in [ "mcast-rate", "beacon-interval" ])
                        if (wdev[key])
                                push(cmd, key, wdev[key]);