From 888cddb662847c3c082f150fb2c9ad8d95f62324 Mon Sep 17 00:00:00 2001 From: David Bauer <blocktrron@users.noreply.github.com> Date: Sat, 29 Dec 2018 21:48:12 +0100 Subject: [PATCH] gluon-core: distribute dualband radios (#1606) This commit distributes dualband radios evenly on 2.4 GHz and 5GHz with 2.4 GHz being prioritised higher than 5 GHz. This means in case a device has only a single radio and this radio supports operation in both bands, it will be set to 2.4 GHz. Tested-by: Martin Weinelt <martin@darmstadt.freifunk.net> Signed-off-by: David Bauer <mail@david-bauer.net> --- .../luasrc/lib/gluon/upgrade/200-wireless | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless b/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless index 72abfde43..e4c252b19 100755 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless @@ -10,6 +10,43 @@ local uci = require('simple-uci').cursor() -- Initial if not sysconfig.gluon_version then uci:delete_all('wireless', 'wifi-iface') + + -- First count all radios with a fixed frequency band. + -- This is needed to distribute devices which have radios + -- capable of operating in the 2.4 GHz and 5 GHz band need + -- to be distributed evenly. + local radio_band_count = {band24=0, band5=0} + util.foreach_radio(uci, function(radio, index, config) + local hwmodes = iwinfo.nl80211.hwmodelist(util.find_phy(radio)) + if (hwmodes.a or hwmodes.ac) and hwmodes.g then + -- Dualband - do nothing in this step + elseif hwmodes.g then + -- 2.4 GHz + radio_band_count["band24"] = radio_band_count["band24"] + 1 + elseif hwmodes.a or hwmodes.ac then + -- 5 GHz + radio_band_count["band5"] = radio_band_count["band5"] + 1 + end + end) + + -- Use the number of all fixed 2.4G GHz and 5 GHz radios to + -- distribute dualband radios in this step. + util.foreach_radio(uci, function(radio, index, config) + local radio_name = radio['.name'] + local hwmodes = iwinfo.nl80211.hwmodelist(util.find_phy(radio)) + if (hwmodes.a or hwmodes.ac) and hwmodes.g then + -- Dualband radio + if radio_band_count["band24"] <= radio_band_count["band5"] then + -- Assign radio to 2.4GHz band + radio_band_count["band24"] = radio_band_count["band24"] + 1 + uci:set('wireless', radio_name, 'hwmode', '11g') + else + -- Assign radio to 5GHz band + radio_band_count["band5"] = radio_band_count["band5"] + 1 + uci:set('wireless', radio_name, 'hwmode', '11a') + end + end + end) end local function get_channel(radio, config) -- GitLab