From 5f197067569920d91501f253481b46eb242da789 Mon Sep 17 00:00:00 2001
From: David Bauer <mail@david-bauer.net>
Date: Mon, 20 May 2019 21:29:08 +0200
Subject: [PATCH] gluon-core: fix mesh radios not being created

This commit fixes a bug where on first setup, mesh interfaces won't be
created for 2.4GHz radios.
---
 .../luasrc/lib/gluon/upgrade/200-wireless     | 42 +++++++++++--------
 1 file changed, 25 insertions(+), 17 deletions(-)

diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless b/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless
index ccf485455..df577ea2a 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless
@@ -200,6 +200,29 @@ local function fixup_wan(radio, index)
 	uci:set('wireless', name, 'macaddr', macaddr)
 end
 
+local function configure_mesh_wireless(radio, index, config)
+	local radio_name = radio['.name']
+	local suffix = radio_name:match('^radio(%d+)$')
+
+	local ibss_disabled = is_disabled('ibss_' .. radio_name)
+	local mesh_disabled = is_disabled('mesh_' .. radio_name)
+
+	configure_ibss(config.ibss(), radio, index, suffix,
+		first_non_nil(
+			ibss_disabled,
+			mesh_disabled,
+			config.ibss.disabled(false)
+		)
+	)
+	configure_mesh(config.mesh(), radio, index, suffix,
+		first_non_nil(
+			mesh_disabled,
+			ibss_disabled,
+			config.mesh.disabled(false)
+		)
+	)
+end
+
 util.foreach_radio(uci, function(radio, index, config)
 	local radio_name = radio['.name']
 
@@ -228,6 +251,7 @@ util.foreach_radio(uci, function(radio, index, config)
 	local hwmode = radio.hwmode
 	if hwmode == '11g' or hwmode == '11ng' then
 		uci:set('wireless', radio_name, 'legacy_rates', false)
+		configure_mesh_wireless(radio, index, config)
 	elseif (hwmode == '11a' or hwmode == '11na') then
 		if is_outdoor() then
 			uci:set('wireless', radio_name, 'channels', config.outdoor_chanlist())
@@ -246,23 +270,7 @@ util.foreach_radio(uci, function(radio, index, config)
 			util.remove_from_set(hostapd_options, 'country3=0x4f')
 			uci:set_list('wireless', radio_name, 'hostapd_options', hostapd_options)
 
-			local ibss_disabled = is_disabled('ibss_' .. radio_name)
-			local mesh_disabled = is_disabled('mesh_' .. radio_name)
-
-			configure_ibss(config.ibss(), radio, index, suffix,
-				first_non_nil(
-					ibss_disabled,
-					mesh_disabled,
-					config.ibss.disabled(false)
-				)
-			)
-			configure_mesh(config.mesh(), radio, index, suffix,
-				first_non_nil(
-					mesh_disabled,
-					ibss_disabled,
-					config.mesh.disabled(false)
-				)
-			)
+			configure_mesh_wireless(radio, index, config)
 		end
 	end
 
-- 
GitLab