From 1322fdc8d285a47a62639261011f5d4823c10111 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sat, 6 Mar 2010 19:13:03 +0000 Subject: modules/admin-full: rewrite vlan setup for new swconfig style config format --- .../luasrc/model/cbi/admin_network/vlan.lua | 107 ++++++++++++++++++++- 1 file changed, 102 insertions(+), 5 deletions(-) diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua b/modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua index f746ce076..310161632 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/vlan.lua @@ -2,6 +2,7 @@ LuCI - Lua Configuration Interface Copyright 2008 Steven Barth +Copyright 2010 Jo-Philipp Wich Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,10 +14,106 @@ $Id$ ]]-- m = Map("network", translate("Switch"), translate("The network ports on your router can be combined to several VLANs in which computers can communicate directly with each other. VLANs are often used to separate different network segments. Often there is by default one Uplink port for a connection to the next greater network like the internet and other ports for a local network.")) -s = m:section(TypedSection, "switch", "") +m.uci:foreach("network", "switch", + function(x) -for i = 0, 15 do - s:option(Value, "vlan"..i, "ethX."..i).optional = true -end + -- Switch properties + s = m:section(NamedSection, x['.name'], "switch", "Switch: %s" % x['.name']) + s.addremove = false -return m \ No newline at end of file + s:option(Flag, "enable", "Enable this switch") + .cfgvalue = function(self, section) return Flag.cfgvalue(self, section) or self.enabled end + + s:option(Flag, "enable_vlan", "Enable VLAN functionality") + .cfgvalue = function(self, section) return Flag.cfgvalue(self, section) or self.enabled end + + s:option(Flag, "reset", "Reset switch during setup") + .cfgvalue = function(self, section) return Flag.cfgvalue(self, section) or self.enabled end + + + -- VLAN table + s = m:section(TypedSection, "switch_vlan", "VLANs: %s" % x['.name']) + s.template = "cbi/tblsection" + s.rowcolors = true + s.addremove = true + + s.sectiontitle = function(self, section) + return "VLAN #%d" % (m.uci:get("network", section, "vlan") or 0) + end + + s.filter = function(self, section) + return m.uci:get("network", section, "device") == x['.name'] + or m.uci:get("network", section, "device") == nil -- needed for just created vlan sections + end + + s.cfgsections = function(self) + local osections = TypedSection.cfgsections(self) + local sections = { } + local section + + for _, section in luci.util.spairs( + osections, + function(a, b) + return (tonumber(m.uci:get("network", osections[a], "vlan")) or 0) + < (tonumber(m.uci:get("network", osections[b], "vlan")) or 0) + end + ) do + sections[#sections+1] = section + end + + return sections + end + + s.create = function(self, section) + local n = tonumber(section) + if n ~= nil and n >= 0 then + local sn = "%s_%d" %{ x['.name'], n } + local rv = TypedSection.create(self, sn) + m.uci:set("network", sn, "device", x['.name']) + m.uci:set("network", sn, "vlan", n) + return rv + end + return nil + end + + + p0 = s:option(Flag, "0", "Port 0") + p1 = s:option(Flag, "1", "Port 1") + p2 = s:option(Flag, "2", "Port 2") + p3 = s:option(Flag, "3", "Port 3") + p4 = s:option(Flag, "4", "Port 4") + p5 = s:option(Flag, "5", "CPU" ) + + + p0.cfgvalue = function(self, section) + local pts = (m.uci:get("network", section, "ports") or "") + return (pts:match("%f[%w]" .. self.option .. "%f[%W]") and self.enabled or self.disabled) + end + + p1.cfgvalue = p0.cfgvalue + p2.cfgvalue = p0.cfgvalue + p3.cfgvalue = p0.cfgvalue + p4.cfgvalue = p0.cfgvalue + p5.cfgvalue = p0.cfgvalue + + + p0.parse = function(self, section) + local pts = { } + if p0:formvalue(section) then pts[#pts+1] = 0 end + if p1:formvalue(section) then pts[#pts+1] = 1 end + if p2:formvalue(section) then pts[#pts+1] = 2 end + if p3:formvalue(section) then pts[#pts+1] = 3 end + if p4:formvalue(section) then pts[#pts+1] = 4 end + if p5:formvalue(section) then pts[#pts+1] = 5 end + m.uci:set("network", section, "ports", table.concat(pts, " ")) + end + + p1.parse = function() end + p2.parse = p1.parse + p3.parse = p1.parse + p4.parse = p1.parse + p5.parse = p1.parse + end +) + +return m -- cgit v1.2.3