s = m:section(NamedSection, arg[1], "rule", "")
s.anonymous = true
+s.addremove = false
+
+back = s:option(DummyValue, "_overview", translate("overview"))
+back.value = ""
+back.titleref = luci.dispatcher.build_url("admin", "network", "firewall", "rule")
+
name = s:option(Value, "_name", translate("name")..translate("cbi_optional"))
name.rmempty = true
-iface = s:option(ListValue, "src", translate("firewall_rule_src"))
+iface = s:option(ListValue, "src", translate("fw_src"))
iface.rmempty = true
-oface = s:option(ListValue, "dest", translate("firewall_rule_dest"))
-oface:value("")
-oface.optional = true
+oface = s:option(ListValue, "dest", translate("fw_dest"))
+oface:value("", translate("device", "device"))
+oface.rmempty = true
luci.model.uci.cursor():foreach("firewall", "zone",
function (section)
oface:value(section.name)
end)
-proto = s:option(ListValue, "proto", translate("protocol"))
+proto = s:option(Value, "proto", translate("protocol"))
proto.optional = true
proto:value("")
proto:value("tcpudp", "TCP+UDP")
s:option(Value, "src_mac", translate("firewall_rule_srcmac")).optional = true
sport = s:option(Value, "src_port", translate("firewall_rule_srcport"))
-sport.optional = true
sport:depends("proto", "tcp")
sport:depends("proto", "udp")
sport:depends("proto", "tcpudp")
dport = s:option(Value, "dest_port", translate("firewall_rule_destport"))
-dport.optional = true
dport:depends("proto", "tcp")
dport:depends("proto", "udp")
dport:depends("proto", "tcpudp")