From f0b2e632d08b635dff1139f9e9993f03a3608672 Mon Sep 17 00:00:00 2001
From: lemoer <git@irrelefant.net>
Date: Fri, 15 Apr 2022 02:02:44 +0200
Subject: [PATCH] gluon-web-network: initial draft of role configuration

---
 .../gluon/config-mode/model/admin/network.lua | 44 +++++++------------
 1 file changed, 15 insertions(+), 29 deletions(-)

diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
index df92c9659..31aeb902c 100644
--- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
+++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua
@@ -9,13 +9,12 @@ http://www.apache.org/licenses/LICENSE-2.0
 ]]--
 
 local uci = require("simple-uci").cursor()
-local sysconfig = require 'gluon.sysconfig'
-local util = require 'gluon.util'
 
 local wan = uci:get_all("network", "wan")
 local wan6 = uci:get_all("network", "wan6")
 local dns_static = uci:get_first("gluon-wan-dnsmasq", "static")
 
+
 local f = Form(translate("WAN connection"))
 
 local s = f:section(Section)
@@ -76,36 +75,22 @@ end
 
 s = f:section(Section)
 
-local wired_mesh_help = {
-	single = translate('Enable meshing on the Ethernet interface'),
-	wan = translate('Enable meshing on the WAN interface'),
-	lan = translate('Enable meshing on the LAN interface'),
-}
-
-local function wired_mesh(iface)
-	if not sysconfig[iface .. '_ifname'] then return end
-	local iface_roles = uci:get_list('gluon', 'iface_' .. iface, 'role')
-
-	local option = s:option(Flag, 'mesh_' .. iface, wired_mesh_help[iface])
-	option.default = util.contains(iface_roles, 'mesh') ~= false
-
-	function option:write(data)
-		local roles = uci:get_list('gluon', 'iface_' .. iface, 'role')
-		if data then
-			util.add_to_set(roles, 'mesh')
-		else
-			util.remove_from_set(roles, 'mesh')
-		end
-		uci:set_list('gluon', 'iface_' .. iface, 'role', roles)
+uci:foreach('gluon', 'interface', function(config)
+	local section_name = config['.name']
+	local ifaces = s:option(MultiListValue, section_name, config.name)
+
+	ifaces.orientation = 'horizontal'
+	ifaces:value('uplink', 'Uplink') -- TODO: Uplink and Client should be mutually exclusive.
+	ifaces:value('mesh', 'Mesh')
+	ifaces:value('client', 'Client')
+
+	ifaces.default = config.role
 
-		-- Reconfigure on next reboot
-		uci:set('gluon', 'core', 'reconfigure', true)
+	function ifaces:write(data)
+		uci:set_list("gluon", section_name, "role", data)
 	end
-end
+end)
 
-wired_mesh('single')
-wired_mesh('wan')
-wired_mesh('lan')
 
 local section
 uci:foreach("system", "gpio_switch", function(si)
@@ -166,4 +151,5 @@ function f:write()
 	uci:commit('system')
 end
 
+
 return f
-- 
GitLab