X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=modules%2Fadmin-full%2Fluasrc%2Fmodel%2Fcbi%2Fadmin_network%2Fifaces.lua;h=3a6538c7be347d4ba542b6cc64a108581b99e464;hp=6bee998b6a90f54bde8450ced7b67bafccb7edfd;hb=c7f225b1338762f1bd08aa39f24c7790fa94c754;hpb=8c675f6a6ccd30c79fbc2d624b9ce2e6d7375d66 diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua b/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua index 6bee998b6..3a6538c7b 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua @@ -13,8 +13,8 @@ You may obtain a copy of the License at $Id$ ]]-- -local wa = require "luci.tools.webadmin" local fs = require "nixio.fs" +local fw = require "luci.model.firewall" arg[1] = arg[1] or "" @@ -26,6 +26,9 @@ local has_pppoa = fs.glob("/usr/lib/pppd/*/pppoatm.so")() local has_ipv6 = fs.access("/proc/net/ipv6_route") m = Map("network", translate("interfaces"), translate("a_n_ifaces1")) +m:chain("firewall") + +fw.init(m.uci) s = m:section(NamedSection, arg[1], "interface") s.addremove = true @@ -91,49 +94,36 @@ for i,d in ipairs(luci.sys.net.devices()) do end end -local zones = wa.network_get_zones(arg[1]) -if zones then - if #zones == 0 then - m:chain("firewall") - - fwzone = s:taboption("general", Value, "_fwzone", - translate("network_interface_fwzone"), - translate("network_interface_fwzone_desc")) - fwzone.rmempty = true - fwzone:value("", "- " .. translate("none") .. " -") - fwzone:value(arg[1]) - m.uci:load("firewall") - m.uci:foreach("firewall", "zone", - function (section) - fwzone:value(section.name) - end - ) - - function fwzone.write(self, section, value) - local zone = wa.firewall_find_zone(value) - local stat - - if not zone then - stat = m.uci:section("firewall", "zone", nil, { - name = value, - network = section - }) - else - local net = m.uci:get("firewall", zone, "network") - net = (net or value) .. " " .. section - stat = m.uci:set("firewall", zone, "network", net) - end - - if stat then - self.render = function() end - end + +fwzone = s:taboption("general", Value, "_fwzone", + translate("network_interface_fwzone"), + translate("network_interface_fwzone_desc")) + +fwzone.template = "cbi/firewall_zonelist" +fwzone.rmempty = false + +function fwzone.cfgvalue(self, section) + self.iface = section + local z = fw:get_zones_by_network(section)[1] + return z and z:name() +end + +function fwzone.write(self, section, value) + local zone = fw:get_zone(value) + + if not zone and value == '-' then + value = m:formvalue(self:cbid(section) .. ".newzone") + if value and #value > 0 then + zone = fw:add_zone(value) + else + fw:del_network(section) end - else - fwzone = s:taboption("general", DummyValue, "_fwzone", translate("zone")) - fwzone.value = table.concat(zones, ", ") end - fwzone.titleref = luci.dispatcher.build_url("admin", "network", "firewall", "zones") - m.uci:unload("firewall") + + if zone then + fw:del_network(section) + zone:add_network(section) + end end ipaddr = s:taboption("general", Value, "ipaddr", translate("ipaddress"))