From 4e68059bc80883f2a7bca5828e379aa85d7f673b Mon Sep 17 00:00:00 2001 From: Christian Buschau Date: Sat, 5 Nov 2022 21:00:53 +0100 Subject: [PATCH] gluon-core: preserve channel list for 5G radios Currently the 'channels' setting of a 5G radio gets overwritten or deleted even if the 'preserve_channels' option is enabled. Don't touch it if 'preserve_channels' is set. --- .../luasrc/lib/gluon/upgrade/200-wireless | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless b/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless index c93e8169..fc57e2d4 100755 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless @@ -53,16 +53,12 @@ local function is_outdoor() end local function get_channel(radio, config) - local channel - if wireless.preserve_channels(uci) then - -- preserved channel always wins - channel = radio.channel - elseif radio.band == '5g' and is_outdoor() then + if radio.band == '5g' and is_outdoor() then -- actual channel will be picked and probed from chanlist - channel = 'auto' + return 'auto' end - return channel or config.channel() + return config.channel() end local function get_htmode(radio) @@ -179,6 +175,20 @@ local function configure_mesh_wireless(radio, index, config, disabled) ) end +local function set_channels(radio, radio_name, config) + if wireless.preserve_channels(uci) then + return + end + local channel = get_channel(radio, config) + uci:set('wireless', radio_name, 'channel', channel) + + local chanlist + if radio.band == '5g' and is_outdoor() then + chanlist = config.outdor_chanlist() + end + uci:set('wireless', radio_name, 'channels', chanlist) +end + wireless.foreach_radio(uci, function(radio, index, config) local radio_name = radio['.name'] @@ -194,13 +204,13 @@ wireless.foreach_radio(uci, function(radio, index, config) return end - local channel = get_channel(radio, config) local htmode = get_htmode(radio) local beacon_interval = config.beacon_interval() uci:delete('wireless', radio_name, 'disabled') - uci:set('wireless', radio_name, 'channel', channel) + set_channels(radio, radio_name, config) + uci:set('wireless', radio_name, 'htmode', htmode) uci:set('wireless', radio_name, 'country', site.regdom()) @@ -218,13 +228,10 @@ wireless.foreach_radio(uci, function(radio, index, config) uci:set_list('wireless', radio_name, 'hostapd_options', hostapd_options) if is_outdoor() then - uci:set('wireless', radio_name, 'channels', config.outdoor_chanlist()) - -- enforce outdoor channels by filtering the regdom for outdoor channels uci:set('wireless', radio_name, 'country3', '0x4f') configure_mesh_wireless(radio, index, config, true) else - uci:delete('wireless', radio_name, 'channels') uci:delete('wireless', radio_name, 'country3') configure_mesh_wireless(radio, index, config) end