[luci] pending patchs

Etienne Champetier etienne.champetier at free.fr
Tue Sep 6 14:49:12 CEST 2011


Hi

Still no news/comments
Files attached are my 3 patchs, 2 of them refreshed to apply on the trunk (rev 7465)

Please answer

Le 15/08/2011 07:42, etienne.champetier at free.fr a écrit :
> Hi
>
> I still have 3 pending patch here (last 3 threads)
> https://lists.subsignal.org/pipermail/luci/2011-June/thread.html
>
> Is there a way to have them integrated before 2012 and the end of the world :-)
>
> Best Regards
> Etienne Champetier
> _______________________________________________
> luci mailing list
> luci at lists.subsignal.org
> https://lists.subsignal.org/mailman/listinfo/luci
-------------- next part --------------
Index: libs/sys/luasrc/sys.lua
===================================================================
--- libs/sys/luasrc/sys.lua	(révision 7465)
+++ libs/sys/luasrc/sys.lua	(copie de travail)
@@ -296,6 +296,23 @@
 	return route
 end
 
+--- Return a table with all the current IPv4 default routes. 
+-- @return	Table of default routes.
+--			The following fields are defined for each route:
+--			{ "dest", "gateway", "metric", "refcount", "usecount", "irtt",
+--			  "flags", "device" }
+function net.defaultroutes()
+	local routes = { }
+
+	net.routes(function(rt)
+		if rt.dest:prefix() == 0 then
+			routes[#routes+1] = rt
+		end
+	end)
+
+	return routes
+end
+
 --- Determine the current IPv6 default route. If multiple default routes exist,
 -- return the one with the lowest metric.
 -- @return	Table with the properties of the current default route.
@@ -327,6 +344,25 @@
 	return route
 end
 
+--- Return a table with all the current IPv6 default routes. 
+-- @return	Table of default routes.
+--			The following fields are defined for each route:
+--			{ "source", "dest", "nexthop", "metric", "refcount", "usecount",
+--			  "flags", "device" }
+function net.defaultroutes6()
+	local routes = { }
+	local global_unicast = luci.ip.IPv6("2000::/3")
+
+	net.routes6(function(rt)
+		if (rt.dest:prefix() == 0 and rt.device ~= "lo") or rt.dest:equal(global_unicast)
+		then
+			routes[#routes+1] = rt
+		end
+	end)
+
+	return routes
+end
+
 --- Determine the names of available network interfaces.
 -- @return	Table containing all current interface names
 function net.devices()
Index: modules/admin-full/luasrc/view/admin_status/index.htm
===================================================================
--- modules/admin-full/luasrc/view/admin_status/index.htm	(révision 7465)
+++ modules/admin-full/luasrc/view/admin_status/index.htm	(copie de travail)
@@ -24,18 +24,28 @@
 
 	if luci.http.formvalue("status") == "1" then
 		local ntm = require "luci.model.network".init()
-		local dr4 = luci.sys.net.defaultroute()
-		local dr6 = luci.sys.net.defaultroute6()
+		local drs4 = luci.sys.net.defaultroutes()
+		local drs6 = luci.sys.net.defaultroutes6()
+		local wans = { }
+		local wans6 = { }
 		local wan, wan6
 
-		if dr4 and dr4.device then
-			wan = ntm:get_interface(dr4.device)
-			wan = wan and wan:get_network()
+		if drs4 then
+			for i= 1,#drs4 do
+				if drs4[i].device then
+					wan = ntm:get_interface(drs4[i].device)
+					wans[#wans+1] = wan and wan:get_network()
+				end
+			end
 		end
 
-		if dr6 and dr6.device then
-			wan6 = ntm:get_interface(dr6.device)
-			wan6 = wan6 and wan6:get_network()
+		if drs6 then
+			for i= 1,#drs6 do
+				if drs6[i].device then
+					wan6 = ntm:get_interface(drs6[i].device)
+					wans6[#wans6 + 1] = wan6 and wan6:get_network()
+				end
+			end
 		end
 
 		local _, _, memtotal, memcached, membuffers, memfree = luci.sys.sysinfo()
@@ -61,33 +71,41 @@
 			connmax    = conn_max,
 			conncount  = conn_count,
 			leases     = luci.tools.status.dhcp_leases(),
-			wifinets   = luci.tools.status.wifi_networks()
+			wifinets   = luci.tools.status.wifi_networks(),
+			wans       = { },
+			wans6      = { }
 		}
 
-		if wan then
-			rv.wan = {
-				ipaddr  = wan:ipaddr(),
-				gwaddr  = wan:gwaddr(),
-				netmask = wan:netmask(),
-				dns     = wan:dnsaddrs(),
-				expires = wan:expires(),
-				uptime  = wan:uptime(),
-				proto   = wan:proto(),
-				ifname  = wan:ifname(),
-				link    = wan:adminlink()
-			}
+		for i= 1,#wans do
+			wan = wans[i]
+			if wan then
+				rv.wans[#rv.wans+1] = {
+					ipaddr  = wan:ipaddr(),
+					gwaddr  = wan:gwaddr(),
+					netmask = wan:netmask(),
+					dns     = wan:dnsaddrs(),
+					expires = wan:expires(),
+					uptime  = wan:uptime(),
+					proto   = wan:proto(),
+					ifname  = wan:ifname(),
+					link    = wan:adminlink()
+				}
+			end
 		end
 
-		if wan6 then
-			rv.wan6 = {
-				ip6addr = wan6:ip6addr(),
-				gw6addr = wan6:gw6addr(),
-				dns     = wan6:dns6addrs(),
-				uptime  = wan6:uptime(),
-				ifname  = wan6:ifname(),
-				link    = wan6:adminlink()
-			}
-		end
+		for i= 1,#wans6 do
+			wan6 = wans6[i]
+			if wan6 then
+				rv.wans6[#rv.wans6 + 1] = {
+					ip6addr = wan6:ip6addr(),
+					gw6addr = wan6:gw6addr(),
+					dns     = wan6:dns6addrs(),
+					uptime  = wan6:uptime(),
+					ifname  = wan6:ifname(),
+					link    = wan6:adminlink()
+				}
+			end
+		end	
 
 		luci.http.prepare_content("application/json")
 		luci.http.write_json(rv)
@@ -127,102 +145,154 @@
 		iwxhr.get('<%=REQUEST_URI%>', { status: 1 },
 			function(x, info)
 			{
-				var si = document.getElementById('wan4_i');
-				var ss = document.getElementById('wan4_s');
-				var ifc = info.wan;
-
-				if (ifc && ifc.ifname && ifc.proto != 'none')
+				var w4t = document.getElementById('wan4_table');
+				if (w4t)
 				{
-					var s = String.format(
-						'<strong><%:Type%>: </strong>%s<br />' +
-						'<strong><%:Address%>: </strong>%s<br />' +
-						'<strong><%:Netmask%>: </strong>%s<br />' +
-						'<strong><%:Gateway%>: </strong>%s<br />',
-							ifc.proto,
-							(ifc.ipaddr) ? ifc.ipaddr : '0.0.0.0',
-							(ifc.netmask && ifc.netmask != ifc.ipaddr) ? ifc.netmask : '255.255.255.255',
-							(ifc.gwaddr) ? ifc.gwaddr : '0.0.0.0'
-					);
-
-					for (var i = 0; i < ifc.dns.length; i++)
+					var w4tbody = w4t.rows[0].parentNode;
+					while (w4t.rows.length > 0)
+						w4tbody.deleteRow(0);
+					
+					for (var i = 0; i < info.wans.length; i++)
 					{
-						s += String.format(
-							'<strong><%:DNS%> %d: </strong>%s<br />',
-							i + 1, ifc.dns[i]
-						);
-					}
+						var ifc = info.wans[i];
+						
+						if (ifc && ifc.ifname && ifc.proto != 'none')
+						{
+							var tr = w4tbody.insertRow(-1);
+							var si = tr.insertCell(-1);
+							si.style.width = "16px";
+							si.style.textAlign = "center";
+							si.style.padding = "3px";
+							var ss = tr.insertCell(-1);
+							ss.style.verticalAlign = "middle";
+							ss.style.padding = "3px";
+							
+							var s = String.format(
+								'<strong><%:Type%>: </strong>%s<br />' +
+								'<strong><%:Address%>: </strong>%s<br />' +
+								'<strong><%:Netmask%>: </strong>%s<br />' +
+								'<strong><%:Gateway%>: </strong>%s<br />',
+									ifc.proto,
+									(ifc.ipaddr) ? ifc.ipaddr : '0.0.0.0',
+									(ifc.netmask && ifc.netmask != ifc.ipaddr) ? ifc.netmask : '255.255.255.255',
+									(ifc.gwaddr) ? ifc.gwaddr : '0.0.0.0'
+							);
 
-					if (ifc.expires > -1)
-					{
-						s += String.format(
-							'<strong><%:Expires%>: </strong>%t<br />',
-							ifc.expires
-						);
+							for (var j = 0; j < ifc.dns.length; j++)
+							{
+								s += String.format(
+									'<strong><%:DNS%> %d: </strong>%s<br />',
+									j + 1, ifc.dns[j]
+								);
+							}
+
+							if (ifc.expires > -1)
+							{
+								s += String.format(
+									'<strong><%:Expires%>: </strong>%t<br />',
+									ifc.expires
+								);
+							}
+
+							if (ifc.uptime > 0)
+							{
+								s += String.format(
+									'<strong><%:Connected%>: </strong>%t<br />',
+									ifc.uptime
+								);
+							}
+
+							ss.innerHTML = String.format('<small>%s</small>', s);
+							si.innerHTML = String.format(
+								'<img src="<%=resource%>/icons/ethernet.png" />' +
+								'<br /><small><a href="%s">%s</a></small>',
+									ifc.link, ifc.ifname
+							);
+						}
 					}
-
-					if (ifc.uptime > 0)
+					if (w4t.rows.length == 0)
 					{
-						s += String.format(
-							'<strong><%:Connected%>: </strong>%t<br />',
-							ifc.uptime
-						);
+						var tr = w4tbody.insertRow(-1);
+						var si = tr.insertCell(-1);
+						si.style.width = "16px";
+						si.style.textAlign = "center";
+						si.style.padding = "3px";
+						var ss = tr.insertCell(-1);
+						ss.style.verticalAlign = "middle";
+						ss.style.padding = "3px";
+						si.innerHTML = '<img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small>';
+						ss.innerHTML = '<em>Not connected</em>';
 					}
-
-					ss.innerHTML = String.format('<small>%s</small>', s);
-					si.innerHTML = String.format(
-						'<img src="<%=resource%>/icons/ethernet.png" />' +
-						'<br /><small><a href="%s">%s</a></small>',
-							ifc.link, ifc.ifname
-					);
 				}
-				else
-				{
-					si.innerHTML = '<img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small>';
-					ss.innerHTML = '<em>Not connected</em>';
-				}
 
 				<% if has_ipv6 then %>
-				var si6 = document.getElementById('wan6_i');
-				var ss6 = document.getElementById('wan6_s');
-				var ifc6 = info.wan6;
-
-				if (ifc6 && ifc6.ifname && ifc6.proto != 'none')
+				var w6t = document.getElementById('wan6_table');
+				if (w6t)
 				{
-					var s = String.format(
-						'<strong><%:Address%>: </strong>%s<br />' +
-						'<strong><%:Gateway%>: </strong>%s<br />',
-							(ifc6.ip6addr) ? ifc6.ip6addr : '::',
-							(ifc6.gw6addr) ? ifc6.gw6addr : '::'
-					);
+					var w6tbody = w6t.rows[0].parentNode;
+					while (w6t.rows.length > 0)
+						w6tbody.deleteRow(0);
+					
+					for (var i = 0; i < info.wans6.length; i++)
+					{
+						var ifc6 = info.wans6[i];
 
-					for (var i = 0; i < ifc6.dns.length; i++)
-					{
-						s += String.format(
-							'<strong><%:DNS%> %d: </strong>%s<br />',
-							i + 1, ifc6.dns[i]
-						);
+						if (ifc6 && ifc6.ifname && ifc6.proto != 'none')
+						{
+							var tr = w6tbody.insertRow(-1);
+							var si6 = tr.insertCell(-1);
+							si6.style.width = "16px";
+							si6.style.textAlign = "center";
+							si6.style.padding = "3px";
+							var ss6 = tr.insertCell(-1);
+							ss6.style.verticalAlign = "middle";
+							ss6.style.padding = "3px";
+							
+							var s = String.format(
+								'<strong><%:Address%>: </strong>%s<br />' +
+								'<strong><%:Gateway%>: </strong>%s<br />',
+									(ifc6.ip6addr) ? ifc6.ip6addr : '::',
+									(ifc6.gw6addr) ? ifc6.gw6addr : '::'
+							);
+
+							for (var j = 0; j < ifc6.dns.length; j++)
+							{
+								s += String.format(
+									'<strong><%:DNS%> %d: </strong>%s<br />',
+									j + 1, ifc6.dns[j]
+								);
+							}
+
+							if (ifc6.uptime > 0)
+							{
+								s += String.format(
+									'<strong><%:Connected%>: </strong>%t<br />',
+									ifc6.uptime
+								);
+							}
+
+							ss6.innerHTML = String.format('<small>%s</small>', s);
+							si6.innerHTML = String.format(
+								'<img src="<%=resource%>/icons/ethernet.png" />' +
+								'<br /><small><a href="%s">%s</a></small>',
+									ifc6.link, ifc6.ifname
+							);
+						}
 					}
-
-					if (ifc6.uptime > 0)
+					if (w6t.rows.length == 0)
 					{
-						s += String.format(
-							'<strong><%:Connected%>: </strong>%t<br />',
-							ifc6.uptime
-						);
+						var tr = w6tbody.insertRow(-1);
+						var si6 = tr.insertCell(-1);
+						si6.style.width = "16px";
+						si6.style.textAlign = "center";
+						si6.style.padding = "3px";
+						var ss6 = tr.insertCell(-1);
+						ss6.style.verticalAlign = "middle";
+						ss6.style.padding = "3px";
+						si6.innerHTML = '<img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small>';
+						ss6.innerHTML = '<em>Not connected</em>';
 					}
-
-					ss6.innerHTML = String.format('<small>%s</small>', s);
-					si6.innerHTML = String.format(
-						'<img src="<%=resource%>/icons/ethernet.png" />' +
-						'<br /><small><a href="%s">%s</a></small>',
-							ifc6.link, ifc6.ifname
-					);
 				}
-				else
-				{
-					si6.innerHTML = '<img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small>';
-					ss6.innerHTML = '<em>Not connected</em>';
-				}
 				<% end %>
 
 				<% if has_dhcp then %>
@@ -500,16 +570,16 @@
 
 	<table width="100%" cellspacing="10">
 		<tr><td width="33%" style="vertical-align:top"><%:IPv4 WAN Status%></td><td>
-			<table><tr>
-				<td id="wan4_i" style="width:16px; text-align:center; padding:3px"><img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small></td>
-				<td id="wan4_s" style="vertical-align:middle; padding: 3px"><em><%:Collecting data...%></em></td>
+			<table id="wan4_table" cellspacing="10"><tr>
+				<td style="width:16px; text-align:center; padding:3px"><img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small></td>
+				<td style="vertical-align:middle; padding: 3px"><em><%:Collecting data...%></em></td>
 			</tr></table>
 		</td></tr>
 		<% if has_ipv6 then %>
 		<tr><td width="33%" style="vertical-align:top"><%:IPv6 WAN Status%></td><td>
-			<table><tr>
-				<td id="wan6_i" style="width:16px; text-align:center; padding:3px"><img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small></td>
-				<td id="wan6_s" style="vertical-align:middle; padding: 3px"><em><%:Collecting data...%></em></td>
+			<table id="wan6_table" cellspacing="10"><tr>
+				<td style="width:16px; text-align:center; padding:3px"><img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small></td>
+				<td style="vertical-align:middle; padding: 3px"><em><%:Collecting data...%></em></td>
 			</tr></table>
 		</td></tr>
 		<% end %>
-------------- next part --------------
Index: applications/luci-multiwan/luasrc/controller/multiwan.lua
===================================================================
--- applications/luci-multiwan/luasrc/controller/multiwan.lua	(révision 7465)
+++ applications/luci-multiwan/luasrc/controller/multiwan.lua	(copie de travail)
@@ -11,8 +11,50 @@
 	page = entry({"admin", "network", "multiwan"}, cbi("multiwan/multiwan"), _("Multi-WAN"))
 	page.i18n = "multiwan"
 	page.dependent = true
+	
+	entry({"admin", "network", "multiwan", "status"}, call("multiwan_status"))
 
 	page = entry({"mini", "network", "multiwan"}, cbi("multiwan/multiwanmini", {autoapply=true}), _("Multi-WAN"))
 	page.i18n = "multiwan"
 	page.dependent = true
 end
+function multiwan_status()
+	local nfs = require "nixio.fs"
+	local cachefile = "/tmp/.mwan/cache"
+
+	local rv = {	}
+
+	cachefile = nfs.readfile(cachefile)
+	if cachefile then
+		local ntm = require "luci.model.network".init()
+		_, _, wan_if_map = string.find(cachefile, "wan_if_map=\"([^\"]*)\"")
+		_, _, wan_fail_map = string.find(cachefile, "wan_fail_map=\"([^\"]*)\"")
+		_, _, wan_recovery_map = string.find(cachefile, "wan_recovery_map=\"([^\"]*)\"")
+		
+		rv.wans = { }
+		wansid = {}
+
+		for wanname, wanifname in string.gfind(wan_if_map, "([^%[]+)%[([^%]]+)%]") do
+			local wanlink = ntm:get_interface(wanifname):get_network():adminlink()
+			wansid[wanname] = #rv.wans + 1
+			rv.wans[wansid[wanname]] = { name = wanname, link = wanlink, ifname = wanifname, status = "ok", count = 0 }
+		end
+
+		for wanname, failcount in string.gfind(wan_fail_map, "([^%[]+)%[([^%]]+)%]") do
+			if failcount == "x" then
+				rv.wans[wansid[wanname]].status = "ko"
+			else
+				rv.wans[wansid[wanname]].status = "failing"
+				rv.wans[wansid[wanname]].count = failcount
+			end
+		end
+
+		for wanname, recoverycount in string.gfind(wan_recovery_map, "([^%[]+)%[([^%]]+)%]") do
+			rv.wans[wansid[wanname]].status = "recovering"
+			rv.wans[wansid[wanname]].count = recoverycount
+		end
+	end
+
+	luci.http.prepare_content("application/json")
+	luci.http.write_json(rv)
+end
Index: applications/luci-multiwan/luasrc/view/multiwan_status.htm
===================================================================
--- applications/luci-multiwan/luasrc/view/multiwan_status.htm	(révision 0)
+++ applications/luci-multiwan/luasrc/view/multiwan_status.htm	(révision 0)
@@ -0,0 +1,55 @@
+<script type="text/javascript">//<![CDATA[
+	var stxhr = new XHR();
+	var update_status = function() {
+		stxhr.get('<%=luci.dispatcher.build_url("admin", "network", "multiwan", "status")%>', null,
+			function(x, st)
+			{
+				var tx = document.getElementById('multiwan_status_text');
+				if (tx)
+				{
+					if (st && st.wans)
+					{
+						var temp = ""
+						for( var i = 0; i < st.wans.length; i++ )
+						{
+							if (st.wans[i].status == "ok")
+								temp += "<span class='wanok'><strong>" + st.wans[i].name + "(<a href='" + st.wans[i].link + "'>" +st.wans[i].ifname + "</a>) :</strong> OK</span>"
+	
+							if (st.wans[i].status == "ko")
+								temp += "<span class='wanko'><strong>" + st.wans[i].name + "(<a href='" + st.wans[i].link + "'>" +st.wans[i].ifname + "</a>) :</strong> KO</span>"
+							
+							if (st.wans[i].status == "recovering")
+								temp += "<span class='wanrecov'><strong>" + st.wans[i].name + "(<a href='" + st.wans[i].link + "'>" +st.wans[i].ifname + "</a>) :</strong> Recovering(" + st.wans[i].count + ")</span>"
+	
+							if (st.wans[i].status == "failing")
+								temp += "<span class='wanfail'><strong>" + st.wans[i].name + "(<a href='" + st.wans[i].link + "'>" +st.wans[i].ifname + "</a>) :</strong> Failing(" + st.wans[i].count + ")</span>"
+						}
+						tx.innerHTML = temp
+					}else{
+						tx.innerHTML = ""
+					}
+				}
+
+				window.setTimeout(update_status, 5000);
+			}
+		)
+	};
+
+	update_status();
+//]]></script>
+
+<style type="text/css">
+  .wanok { background-color: rgb(144, 240, 144); }
+  .wanko { background-color: rgb(240, 144, 144); }
+  .wanrecov { background-color: rgb(240, 240, 0); }
+  .wanfail { background-color: rgb(255, 165, 0); }
+  .wanko, .wanok, .wanrecov, .wanfail {
+	padding: 0.4em;
+	margin: 0.4em;
+  }
+</style>
+
+<fieldset class="cbi-section">
+	<legend><%:Multi-WAN Status%></legend>
+	<div id="multiwan_status_text" style="text-align:center;"><em><%:Collecting data...%></em></div>
+</fieldset>
Index: applications/luci-multiwan/luasrc/view/admin_status/index/multiwan.htm
===================================================================
--- applications/luci-multiwan/luasrc/view/admin_status/index/multiwan.htm	(révision 0)
+++ applications/luci-multiwan/luasrc/view/admin_status/index/multiwan.htm	(révision 0)
@@ -0,0 +1 @@
+<%+multiwan_status%>
-------------- next part --------------
Index: modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua
===================================================================
--- modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua	(révision 7191)
+++ modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua	(copie de travail)
@@ -546,6 +546,14 @@
 encr:depends({mode="sta-wds"})
 encr:depends({mode="mesh"})
 
+function encr.write(self, section, value)
+	if value == "wpa" or value == "wpa2"  then
+		self.map.uci:delete("wireless", section, "key")
+	end
+	self.map.uci:set("wireless", section, "encryption", value)
+end
+
+
 encr:value("none", "No Encryption")
 encr:value("wep-open",   translate("WEP Open System"), {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"})
 encr:value("wep-shared", translate("WEP Shared Key"),  {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"})
@@ -592,35 +600,59 @@
 	encr:value("psk+psk2", "WPA-PSK/WPA2-PSK Mixed Mode")
 end
 
-encr:depends("mode", "ap")
-encr:depends("mode", "sta")
-encr:depends("mode", "ap-wds")
-encr:depends("mode", "sta-wds")
-encr:depends("mode", "wds")
+auth_server = s:taboption("encryption", Value, "auth_server", translate("Radius-Authentication-Server"))
+auth_server:depends({mode="ap", encryption="wpa"})
+auth_server:depends({mode="ap", encryption="wpa2"})
+auth_server:depends({mode="ap-wds", encryption="wpa"})
+auth_server:depends({mode="ap-wds", encryption="wpa2"})
+auth_server.rmempty = true
+auth_server.datatype = "host"
 
-server = s:taboption("encryption", Value, "server", translate("Radius-Server"))
-server:depends({mode="ap", encryption="wpa"})
-server:depends({mode="ap", encryption="wpa2"})
-server:depends({mode="ap-wds", encryption="wpa"})
-server:depends({mode="ap-wds", encryption="wpa2"})
-server.rmempty = true
+auth_port = s:taboption("encryption", Value, "auth_port", translate("Radius-Authentication-Port"), translatef("Default %d", 1812))
+auth_port:depends({mode="ap", encryption="wpa"})
+auth_port:depends({mode="ap", encryption="wpa2"})
+auth_port:depends({mode="ap-wds", encryption="wpa"})
+auth_port:depends({mode="ap-wds", encryption="wpa2"})
+auth_port.rmempty = true
+auth_port.datatype = "port"
 
-port = s:taboption("encryption", Value, "port", translate("Radius-Port"))
-port:depends({mode="ap", encryption="wpa"})
-port:depends({mode="ap", encryption="wpa2"})
-port:depends({mode="ap-wds", encryption="wpa"})
-port:depends({mode="ap-wds", encryption="wpa2"})
-port.rmempty = true
+auth_secret = s:taboption("encryption", Value, "auth_secret", translate("Radius-Authentication-Secret"))
+auth_secret:depends({mode="ap", encryption="wpa"})
+auth_secret:depends({mode="ap", encryption="wpa2"})
+auth_secret:depends({mode="ap-wds", encryption="wpa"})
+auth_secret:depends({mode="ap-wds", encryption="wpa2"})
+auth_secret.rmempty = true
+auth_secret.password = true
 
+acct_server = s:taboption("encryption", Value, "acct_server", translate("Radius-Accounting-Server"))
+acct_server:depends({mode="ap", encryption="wpa"})
+acct_server:depends({mode="ap", encryption="wpa2"})
+acct_server:depends({mode="ap-wds", encryption="wpa"})
+acct_server:depends({mode="ap-wds", encryption="wpa2"})
+acct_server.rmempty = true
+acct_server.datatype = "host"
+
+acct_port = s:taboption("encryption", Value, "acct_port", translate("Radius-Accounting-Port"), translatef("Default %d", 1813))
+acct_port:depends({mode="ap", encryption="wpa"})
+acct_port:depends({mode="ap", encryption="wpa2"})
+acct_port:depends({mode="ap-wds", encryption="wpa"})
+acct_port:depends({mode="ap-wds", encryption="wpa2"})
+acct_port.rmempty = true
+acct_port.datatype = "port"
+
+acct_secret = s:taboption("encryption", Value, "acct_secret", translate("Radius-Accounting-Secret"))
+acct_secret:depends({mode="ap", encryption="wpa"})
+acct_secret:depends({mode="ap", encryption="wpa2"})
+acct_secret:depends({mode="ap-wds", encryption="wpa"})
+acct_secret:depends({mode="ap-wds", encryption="wpa2"})
+acct_secret.rmempty = true
+acct_secret.password = true
+
 wpakey = s:taboption("encryption", Value, "_wpa_key", translate("Key"))
 wpakey:depends("encryption", "psk")
 wpakey:depends("encryption", "psk2")
 wpakey:depends("encryption", "psk+psk2")
 wpakey:depends("encryption", "psk-mixed")
-wpakey:depends({mode="ap", encryption="wpa"})
-wpakey:depends({mode="ap", encryption="wpa2"})
-wpakey:depends({mode="ap-wds", encryption="wpa"})
-wpakey:depends({mode="ap-wds", encryption="wpa2"})
 wpakey.datatype = "wpakey"
 wpakey.rmempty = true
 wpakey.password = true


More information about the luci mailing list