modules/admin-full: fix wifi channel selection on multiple STA networks
authorStephan Günther <steph.guenther@googlemail.com>
Sun, 21 Sep 2014 18:35:20 +0000 (20:35 +0200)
committerJo-Philipp Wich <jow@openwrt.org>
Thu, 9 Oct 2014 23:04:28 +0000 (01:04 +0200)
Besides several AP networks, I have configured two STA networks on my
openwrt box - both on the same radio and thus on the same channel.
This was done via LuCI.

However after both STA networks were set up, I am unable to edit the
channel on neither network. When editing the one STA network, LuCI
tells me that the channel is locked by the other STA network. Same for
the other STA network.

Looks like a bug to me, so I made a patch.

Signed-off-by: Stephan Günther <steph.guenther@googlemail.com>
modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua

index 7cdfb7060cbce0d9d412b36ff17e1a2aaa8804fe..2253752f4f7ea1a1ba53f36e04cfbf9f140dd61b 100644 (file)
@@ -147,21 +147,27 @@ local hwtype = wdev:get("type")
 -- NanoFoo
 local nsantenna = wdev:get("antenna")
 
--- Check whether there is a client interface on the same radio,
--- if yes, lock the channel choice as the station will dicatate the freq
-local has_sta = nil
+-- Check whether there are client interfaces on the same radio,
+-- if yes, lock the channel choice as these stations will dicatate the freq
+local found_sta = nil
 local _, net
-for _, net in ipairs(wdev:get_wifinets()) do
-       if net:mode() == "sta" and net:id() ~= wnet:id() then
-               has_sta = net
-               break
+if wnet:mode() ~= "sta" then
+       for _, net in ipairs(wdev:get_wifinets()) do
+               if net:mode() == "sta" then
+                       if not found_sta then
+                               found_sta = {}
+                               found_sta.channel = net:channel()
+                               found_sta.names = {}
+                       end
+                       found_sta.names[#found_sta.names+1] = net:shortname()
+               end
        end
 end
 
-if has_sta then
+if found_sta then
        ch = s:taboption("general", DummyValue, "choice", translate("Channel"))
-       ch.value = translatef("Locked to channel %d used by %s",
-               has_sta:channel(), has_sta:shortname())
+       ch.value = translatef("Locked to channel %d used by: %s",
+               found_sta.channel, table.concat(found_sta.names, ", "))
 else
        ch = s:taboption("general", Value, "channel", translate("Channel"))
        ch:value("auto", translate("auto"))