X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=modules%2Fluci-mod-admin-full%2Fluasrc%2Fmodel%2Fcbi%2Fadmin_network%2Fifaces.lua;h=38e5de7b39be75fad648db060b61c50c93917ac9;hp=0318522281f2917cfceec0d9dfae6d6e626d1153;hb=6c5bfff53c7736c50238576a2c3a746b887c7a10;hpb=91c0b91a2e1903ee697c214ff7d8fffac559c424 diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua index 031852228..38e5de7b3 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua @@ -16,6 +16,7 @@ local has_firewall = fs.access("/etc/config/firewall") m = Map("network", translate("Interfaces") .. " - " .. arg[1]:upper(), translate("On this page you can configure the network interfaces. You can bridge several interfaces by ticking the \"bridge interfaces\" field and enter the names of several network interfaces separated by spaces. You can also use VLAN notation INTERFACE.VLANNR (e.g.: eth0.1).")) m.redirect = luci.dispatcher.build_url("admin", "network", "network") m:chain("wireless") +m:chain("luci") if has_firewall then m:chain("firewall") @@ -27,18 +28,52 @@ fw.init(m.uci) local net = nw:get_network(arg[1]) +local function set_ifstate(name, option, value) + local found = false + + m.uci:foreach("luci", "ifstate", function (s) + if s.interface == name then + m.uci:set("luci", s[".name"], option, value) + found = true + return false + end + end) + + if not found then + local sid = m.uci:add("luci", "ifstate") + m.uci:set("luci", sid, "interface", name) + m.uci:set("luci", sid, option, value) + end + + m.uci:save("luci") +end + +local function get_ifstate(name, option) + local val + + m.uci:foreach("luci", "ifstate", function (s) + if s.interface == name then + val = m.uci:get("luci", s[".name"], option) + return false + end + end) + + return val +end + local function backup_ifnames(is_bridge) - if not net:is_floating() and not m:get(net:name(), "_orig_ifname") then + if not net:is_floating() and not get_ifstate(net:name(), "ifname") then local ifcs = net:get_interfaces() or { net:get_interface() } if ifcs then local _, ifn local ifns = { } for _, ifn in ipairs(ifcs) do - ifns[#ifns+1] = ifn:name() + local wif = ifn:get_wifinet() + ifns[#ifns+1] = wif and wif:id() or ifn:name() end if #ifns > 0 then - m:set(net:name(), "_orig_ifname", table.concat(ifns, " ")) - m:set(net:name(), "_orig_bridge", tostring(net:is_bridge())) + set_ifstate(net:name(), "ifname", table.concat(ifns, " ")) + set_ifstate(net:name(), "bridge", tostring(net:is_bridge())) end end end @@ -84,10 +119,10 @@ if m:formvalue("cbid.network.%s._switch" % net:name()) then elseif net:is_floating() and not proto:is_floating() then -- if we have backup data, then re-add all orphaned interfaces -- from it and restore the bridge choice - local br = (m:get(net:name(), "_orig_bridge") == "true") + local br = (get_ifstate(net:name(), "bridge") == "true") local ifn local ifns = { } - for ifn in ut.imatch(m:get(net:name(), "_orig_ifname")) do + for ifn in ut.imatch(get_ifstate(net:name(), "ifname")) do ifn = nw:get_interface(ifn) if ifn and not ifn:get_network() then proto:add_interface(ifn) @@ -114,9 +149,7 @@ if m:formvalue("cbid.network.%s._switch" % net:name()) then for k, v in pairs(m:get(net:name())) do if k:sub(1,1) ~= "." and k ~= "type" and - k ~= "ifname" and - k ~= "_orig_ifname" and - k ~= "_orig_bridge" + k ~= "ifname" then m:del(net:name(), k) end @@ -239,6 +272,11 @@ if not net:is_virtual() then translate("Enables the Spanning Tree Protocol on this bridge")) stp:depends("type", "bridge") stp.rmempty = true + + igmp = s:taboption("physical", Flag, "igmp_snooping", translate("Enable IGMP snooping"), + translate("Enables IGMP snooping on this bridge")) + igmp:depends("type", "bridge") + igmp.rmempty = true end @@ -445,7 +483,7 @@ if has_dnsmasq and net:proto() == "static" then limit.datatype = "uinteger" limit.default = "150" - local ltime = s:taboption("general", Value, "leasetime", translate("Leasetime"), + local ltime = s:taboption("general", Value, "leasetime", translate("Lease time"), translate("Expiry time of leased addresses, minimum is 2 minutes (2m).")) ltime.rmempty = true ltime.default = "12h"