$Id$
]]--
-local wa = require "luci.tools.webadmin"
local fs = require "nixio.fs"
+local nw = require "luci.model.network"
+local fw = require "luci.model.firewall"
arg[1] = arg[1] or ""
local has_ipv6 = fs.access("/proc/net/ipv6_route")
m = Map("network", translate("interfaces"), translate("a_n_ifaces1"))
+m:chain("firewall")
+m:chain("wireless")
+
+nw.init(m.uci)
+fw.init(m.uci)
s = m:section(NamedSection, arg[1], "interface")
-s.addremove = true
+s.addremove = false
s:tab("general", translate("a_n_general", "General Setup"))
if has_ipv6 then s:tab("ipv6", translate("a_n_ipv6", "IPv6 Setup")) end
+if has_pppd then s:tab("ppp", translate("a_n_ppp", "PPP Settings")) end
s:tab("physical", translate("a_n_physical", "Physical Settings"))
+s:tab("firewall", translate("a_n_firewall", "Firewall Settings"))
--[[
back = s:taboption("general", DummyValue, "_overview", translate("overview"))
stp.rmempty = true
ifname_single = s:taboption("physical", Value, "ifname_single", translate("interface"))
+ifname_single.template = "cbi/network_ifacelist"
+ifname_single.widget = "radio"
+ifname_single.nobridges = true
+ifname_single.network = arg[1]
ifname_single.rmempty = true
ifname_single:depends("type", "")
end
function ifname_single.write(self, s, val)
- self.map.uci:set("network", s, "ifname", val)
+ local n = nw:get_network(s)
+ if n then
+ local i
+ for _, i in ipairs(n:get_interfaces()) do
+ n:del_interface(i)
+ end
+ n:add_interface(val)
+ end
end
ifname_multi = s:taboption("physical", MultiValue, "ifname_multi", translate("interface"))
+ifname_multi.template = "cbi/network_ifacelist"
+ifname_multi.nobridges = true
+ifname_multi.network = arg[1]
ifname_multi.widget = "checkbox"
ifname_multi:depends("type", "1")
ifname_multi.cfgvalue = ifname_single.cfgvalue
ifname_multi.write = ifname_single.write
-for i,d in ipairs(luci.sys.net.devices()) do
- if d ~= "lo" then
- ifname_single:value(d)
- ifname_multi:value(d)
+
+for _, d in ipairs(nw:get_interfaces()) do
+ if not d:is_bridge() then
+ ifname_single:value(d:name())
+ ifname_multi:value(d:name())
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
+
+local fwd_to, fwd_from
+
+fwzone = s:taboption("firewall", Value, "_fwzone",
+ translate("network_interface_fwzone"),
+ translate("network_interface_fwzone_desc"))
+
+fwzone.template = "cbi/firewall_zonelist"
+fwzone.network = arg[1]
+fwzone.rmempty = false
+
+function fwzone.cfgvalue(self, section)
+ self.iface = section
+ local z = fw:get_zone_by_network(section)
+ 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"))
ipaddr.rmempty = true
ipaddr:depends("proto", "static")
bcast = s:taboption("general", Value, "bcast", translate("broadcast"))
bcast:depends("proto", "static")
-ip6addr = s:taboption("ipv6", Value, "ip6addr", translate("ip6address"), translate("cidr6"))
-ip6addr:depends("proto", "static")
+if has_ipv6 then
+ ip6addr = s:taboption("ipv6", Value, "ip6addr", translate("ip6address"), translate("cidr6"))
+ ip6addr:depends("proto", "static")
-ip6gw = s:taboption("ipv6", Value, "ip6gw", translate("gateway6"))
-ip6gw:depends("proto", "static")
+ ip6gw = s:taboption("ipv6", Value, "ip6gw", translate("gateway6"))
+ ip6gw:depends("proto", "static")
+end
dns = s:taboption("general", Value, "dns", translate("dnsserver"))
dns:depends("peerdns", "")
pass:depends("proto", "ppp")
pass:depends("proto", "3g")
- ka = s:taboption("general", Value, "keepalive",
+ ka = s:taboption("ppp", Value, "keepalive",
translate("network_interface_keepalive"),
translate("network_interface_keepalive_desc")
)
ka:depends("proto", "ppp")
ka:depends("proto", "3g")
- demand = s:taboption("general", Value, "demand",
+ demand = s:taboption("ppp", Value, "demand",
translate("network_interface_demand"),
translate("network_interface_demand_desc")
)
end
if has_pppoa then
- encaps = s:taboption("general", ListValue, "encaps", translate("network_interface_encaps"))
+ encaps = s:taboption("ppp", ListValue, "encaps", translate("network_interface_encaps"))
encaps:depends("proto", "pppoa")
encaps:value("", translate("cbi_select"))
encaps:value("vc", "VC")
encaps:value("llc", "LLC")
- vpi = s:taboption("general", Value, "vpi", "VPI")
+ vpi = s:taboption("ppp", Value, "vpi", "VPI")
vpi:depends("proto", "pppoa")
- vci = s:taboption("general", Value, "vci", "VCI")
+ vci = s:taboption("ppp", Value, "vci", "VCI")
vci:depends("proto", "pppoa")
end
device:depends("proto", "ppp")
device:depends("proto", "3g")
- defaultroute = s:taboption("general", Flag, "defaultroute",
+ defaultroute = s:taboption("ppp", Flag, "defaultroute",
translate("network_interface_defaultroute"),
translate("network_interface_defaultroute_desc")
)
return ( AbstractValue.cfgvalue(...) or '1' )
end
- peerdns = s:taboption("general", Flag, "peerdns",
+ peerdns = s:taboption("ppp", Flag, "peerdns",
translate("network_interface_peerdns"),
translate("network_interface_peerdns_desc")
)
return ( AbstractValue.cfgvalue(...) or '1' )
end
- ipv6 = s:taboption("general", Flag, "ipv6", translate("network_interface_ipv6") )
- ipv6:depends("proto", "ppp")
- ipv6:depends("proto", "pppoa")
- ipv6:depends("proto", "pppoe")
- ipv6:depends("proto", "pptp")
- ipv6:depends("proto", "3g")
+ if has_ipv6 then
+ ipv6 = s:taboption("ppp", Flag, "ipv6", translate("network_interface_ipv6") )
+ ipv6:depends("proto", "ppp")
+ ipv6:depends("proto", "pppoa")
+ ipv6:depends("proto", "pppoe")
+ ipv6:depends("proto", "pptp")
+ ipv6:depends("proto", "3g")
+ end
- connect = s:taboption("general", Value, "connect",
+ connect = s:taboption("ppp", Value, "connect",
translate("network_interface_connect"),
translate("network_interface_connect_desc")
)
connect:depends("proto", "pptp")
connect:depends("proto", "3g")
- disconnect = s:taboption("general", Value, "disconnect",
+ disconnect = s:taboption("ppp", Value, "disconnect",
translate("network_interface_disconnect"),
translate("network_interface_disconnect_desc")
)
disconnect:depends("proto", "pptp")
disconnect:depends("proto", "3g")
- pppd_options = s:taboption("general", Value, "pppd_options",
+ pppd_options = s:taboption("ppp", Value, "pppd_options",
translate("network_interface_pppd_options"),
translate("network_interface_pppd_options_desc")
)
pppd_options:depends("proto", "pptp")
pppd_options:depends("proto", "3g")
- maxwait = s:taboption("general", Value, "maxwait",
+ maxwait = s:taboption("ppp", Value, "maxwait",
translate("network_interface_maxwait"),
translate("network_interface_maxwait_desc")
)
s2:depends("interface", arg[1])
s2.defaults.interface = arg[1]
+s2:tab("general", translate("a_n_general", "General Setup"))
s2.defaults.proto = "static"
-ipaddr = s2:option(Value, "ipaddr", translate("ipaddress"))
-ipaddr.rmempty = true
+s2:taboption("general", Value, "ipaddr", translate("ipaddress")).rmempty = true
-nm = s2:option(Value, "netmask", translate("netmask"))
+nm = s2:taboption("general", Value, "netmask", translate("netmask"))
nm.rmempty = true
nm:value("255.255.255.0")
nm:value("255.255.0.0")
nm:value("255.0.0.0")
-gw = s2:option(Value, "gateway", translate("gateway"))
-gw.rmempty = true
-
-bcast = s2:option(Value, "bcast", translate("broadcast"))
-bcast.optional = true
-
-ip6addr = s2:option(Value, "ip6addr", translate("ip6address"), translate("cidr6"))
-ip6addr.optional = true
+s2:taboption("general", Value, "gateway", translate("gateway")).rmempty = true
+s2:taboption("general", Value, "bcast", translate("broadcast"))
+s2:taboption("general", Value, "dns", translate("dnsserver"))
-ip6gw = s2:option(Value, "ip6gw", translate("gateway6"))
-ip6gw.optional = true
-
-dns = s2:option(Value, "dns", translate("dnsserver"))
-dns.optional = true
+if has_ipv6 then
+ s2:tab("ipv6", translate("a_n_ipv6", "IPv6 Setup"))
+ s2:taboption("ipv6", Value, "ip6addr", translate("ip6address"), translate("cidr6"))
+ s2:taboption("ipv6", Value, "ip6gw", translate("gateway6"))
+end
return m