modules/admin-full: make menus work with no dnsmasq or firewall installed
This commit is contained in:
parent
9c3db58ee4
commit
1aa676d501
2 changed files with 132 additions and 110 deletions
|
@ -20,6 +20,9 @@ local fw = require "luci.model.firewall"
|
||||||
|
|
||||||
arg[1] = arg[1] or ""
|
arg[1] = arg[1] or ""
|
||||||
|
|
||||||
|
local has_dnsmasq = fs.access("/etc/config/dhcp")
|
||||||
|
local has_firewall = fs.access("/etc/config/firewall")
|
||||||
|
|
||||||
local has_3g = fs.access("/usr/bin/gcom")
|
local has_3g = fs.access("/usr/bin/gcom")
|
||||||
local has_pptp = fs.access("/usr/sbin/pptp")
|
local has_pptp = fs.access("/usr/sbin/pptp")
|
||||||
local has_pppd = fs.access("/usr/sbin/pppd")
|
local has_pppd = fs.access("/usr/sbin/pppd")
|
||||||
|
@ -30,9 +33,12 @@ local has_6in4 = fs.access("/lib/network/6in4.sh")
|
||||||
local has_6to4 = fs.access("/lib/network/6to4.sh")
|
local has_6to4 = fs.access("/lib/network/6to4.sh")
|
||||||
|
|
||||||
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 <abbr title=\"Virtual Local Area Network\">VLAN</abbr> notation <samp>INTERFACE.VLANNR</samp> (<abbr title=\"for example\">e.g.</abbr>: <samp>eth0.1</samp>)."))
|
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 <abbr title=\"Virtual Local Area Network\">VLAN</abbr> notation <samp>INTERFACE.VLANNR</samp> (<abbr title=\"for example\">e.g.</abbr>: <samp>eth0.1</samp>)."))
|
||||||
m:chain("firewall")
|
|
||||||
m:chain("wireless")
|
m:chain("wireless")
|
||||||
|
|
||||||
|
if has_firewall then
|
||||||
|
m:chain("firewall")
|
||||||
|
end
|
||||||
|
|
||||||
nw.init(m.uci)
|
nw.init(m.uci)
|
||||||
fw.init(m.uci)
|
fw.init(m.uci)
|
||||||
|
|
||||||
|
@ -56,7 +62,7 @@ if has_pppd then s:tab("ppp", translate("PPP Settings")) end
|
||||||
if has_pppoa then s:tab("atm", translate("ATM Settings")) end
|
if has_pppoa then s:tab("atm", translate("ATM Settings")) end
|
||||||
if has_6in4 or has_6to4 then s:tab("tunnel", translate("Tunnel Settings")) end
|
if has_6in4 or has_6to4 then s:tab("tunnel", translate("Tunnel Settings")) end
|
||||||
s:tab("physical", translate("Physical Settings"))
|
s:tab("physical", translate("Physical Settings"))
|
||||||
s:tab("firewall", translate("Firewall Settings"))
|
if has_firewall then s:tab("firewall", translate("Firewall Settings")) end
|
||||||
|
|
||||||
st = s:taboption("general", DummyValue, "__status", translate("Status"))
|
st = s:taboption("general", DummyValue, "__status", translate("Status"))
|
||||||
st.template = "admin_network/iface_status"
|
st.template = "admin_network/iface_status"
|
||||||
|
@ -143,23 +149,22 @@ ifname_multi.cfgvalue = ifname_single.cfgvalue
|
||||||
ifname_multi.write = ifname_single.write
|
ifname_multi.write = ifname_single.write
|
||||||
|
|
||||||
|
|
||||||
local fwd_to, fwd_from
|
if has_firewall then
|
||||||
|
fwzone = s:taboption("firewall", Value, "_fwzone",
|
||||||
fwzone = s:taboption("firewall", Value, "_fwzone",
|
|
||||||
translate("Create / Assign firewall-zone"),
|
translate("Create / Assign firewall-zone"),
|
||||||
translate("Choose the firewall zone you want to assign to this interface. Select <em>unspecified</em> to remove the interface from the associated zone or fill out the <em>create</em> field to define a new zone and attach the interface to it."))
|
translate("Choose the firewall zone you want to assign to this interface. Select <em>unspecified</em> to remove the interface from the associated zone or fill out the <em>create</em> field to define a new zone and attach the interface to it."))
|
||||||
|
|
||||||
fwzone.template = "cbi/firewall_zonelist"
|
fwzone.template = "cbi/firewall_zonelist"
|
||||||
fwzone.network = arg[1]
|
fwzone.network = arg[1]
|
||||||
fwzone.rmempty = false
|
fwzone.rmempty = false
|
||||||
|
|
||||||
function fwzone.cfgvalue(self, section)
|
function fwzone.cfgvalue(self, section)
|
||||||
self.iface = section
|
self.iface = section
|
||||||
local z = fw:get_zone_by_network(section)
|
local z = fw:get_zone_by_network(section)
|
||||||
return z and z:name()
|
return z and z:name()
|
||||||
end
|
end
|
||||||
|
|
||||||
function fwzone.write(self, section, value)
|
function fwzone.write(self, section, value)
|
||||||
local zone = fw:get_zone(value)
|
local zone = fw:get_zone(value)
|
||||||
|
|
||||||
if not zone and value == '-' then
|
if not zone and value == '-' then
|
||||||
|
@ -175,6 +180,7 @@ function fwzone.write(self, section, value)
|
||||||
fw:del_network(section)
|
fw:del_network(section)
|
||||||
zone:add_network(section)
|
zone:add_network(section)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
ipaddr = s:taboption("general", Value, "ipaddr", translate("<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Address"))
|
ipaddr = s:taboption("general", Value, "ipaddr", translate("<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Address"))
|
||||||
|
@ -507,8 +513,13 @@ dns.optional = true
|
||||||
dns.datatype = "ip4addr"
|
dns.datatype = "ip4addr"
|
||||||
|
|
||||||
|
|
||||||
m2 = Map("dhcp", "", "")
|
--
|
||||||
function m2.on_parse()
|
-- Display DNS settings if dnsmasq is available
|
||||||
|
--
|
||||||
|
|
||||||
|
if has_dnsmasq then
|
||||||
|
m2 = Map("dhcp", "", "")
|
||||||
|
function m2.on_parse()
|
||||||
local has_section = false
|
local has_section = false
|
||||||
|
|
||||||
m2.uci:foreach("dhcp", "dhcp", function(s)
|
m2.uci:foreach("dhcp", "dhcp", function(s)
|
||||||
|
@ -522,75 +533,76 @@ function m2.on_parse()
|
||||||
m2.uci:section("dhcp", "dhcp", nil, { interface = arg[1], ignore = "1" })
|
m2.uci:section("dhcp", "dhcp", nil, { interface = arg[1], ignore = "1" })
|
||||||
m2.uci:save("dhcp")
|
m2.uci:save("dhcp")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
s = m2:section(TypedSection, "dhcp", translate("DHCP Server"))
|
s = m2:section(TypedSection, "dhcp", translate("DHCP Server"))
|
||||||
s.addremove = false
|
s.addremove = false
|
||||||
s.anonymous = true
|
s.anonymous = true
|
||||||
s:tab("general", translate("General Setup"))
|
s:tab("general", translate("General Setup"))
|
||||||
s:tab("advanced", translate("Advanced Settings"))
|
s:tab("advanced", translate("Advanced Settings"))
|
||||||
|
|
||||||
function s.filter(self, section)
|
function s.filter(self, section)
|
||||||
return m2.uci:get("dhcp", section, "interface") == arg[1]
|
return m2.uci:get("dhcp", section, "interface") == arg[1]
|
||||||
end
|
end
|
||||||
|
|
||||||
local ignore = s:taboption("general", Flag, "ignore",
|
local ignore = s:taboption("general", Flag, "ignore",
|
||||||
translate("Ignore interface"),
|
translate("Ignore interface"),
|
||||||
translate("Disable <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr> for " ..
|
translate("Disable <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr> for " ..
|
||||||
"this interface."))
|
"this interface."))
|
||||||
|
|
||||||
ignore.rmempty = false
|
ignore.rmempty = false
|
||||||
|
|
||||||
local start = s:taboption("general", Value, "start", translate("Start"),
|
local start = s:taboption("general", Value, "start", translate("Start"),
|
||||||
translate("Lowest leased address as offset from the network address."))
|
translate("Lowest leased address as offset from the network address."))
|
||||||
start.optional = true
|
start.optional = true
|
||||||
start.datatype = "uinteger"
|
start.datatype = "uinteger"
|
||||||
start.default = "100"
|
start.default = "100"
|
||||||
|
|
||||||
local limit = s:taboption("general", Value, "limit", translate("Limit"),
|
local limit = s:taboption("general", Value, "limit", translate("Limit"),
|
||||||
translate("Maximum number of leased addresses."))
|
translate("Maximum number of leased addresses."))
|
||||||
limit.optional = true
|
limit.optional = true
|
||||||
limit.datatype = "uinteger"
|
limit.datatype = "uinteger"
|
||||||
limit.default = "150"
|
limit.default = "150"
|
||||||
|
|
||||||
local ltime = s:taboption("general", Value, "leasetime", translate("Leasetime"),
|
local ltime = s:taboption("general", Value, "leasetime", translate("Leasetime"),
|
||||||
translate("Expiry time of leased addresses, minimum is 2 Minutes (<code>2m</code>)."))
|
translate("Expiry time of leased addresses, minimum is 2 Minutes (<code>2m</code>)."))
|
||||||
ltime.rmempty = true
|
ltime.rmempty = true
|
||||||
ltime.default = "12h"
|
ltime.default = "12h"
|
||||||
|
|
||||||
local dd = s:taboption("advanced", Flag, "dynamicdhcp",
|
local dd = s:taboption("advanced", Flag, "dynamicdhcp",
|
||||||
translate("Dynamic <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"),
|
translate("Dynamic <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"),
|
||||||
translate("Dynamically allocate DHCP addresses for clients. If disabled, only " ..
|
translate("Dynamically allocate DHCP addresses for clients. If disabled, only " ..
|
||||||
"clients having static leases will be served."))
|
"clients having static leases will be served."))
|
||||||
|
|
||||||
dd.rmempty = false
|
dd.rmempty = false
|
||||||
function dd.cfgvalue(self, section)
|
function dd.cfgvalue(self, section)
|
||||||
return Flag.cfgvalue(self, section) or "1"
|
return Flag.cfgvalue(self, section) or "1"
|
||||||
end
|
end
|
||||||
|
|
||||||
s:taboption("advanced", Flag, "force", translate("Force"),
|
s:taboption("advanced", Flag, "force", translate("Force"),
|
||||||
translate("Force DHCP on this network even if another server is detected."))
|
translate("Force DHCP on this network even if another server is detected."))
|
||||||
|
|
||||||
-- XXX: is this actually useful?
|
-- XXX: is this actually useful?
|
||||||
--s:taboption("advanced", Value, "name", translate("Name"),
|
--s:taboption("advanced", Value, "name", translate("Name"),
|
||||||
-- translate("Define a name for this network."))
|
-- translate("Define a name for this network."))
|
||||||
|
|
||||||
mask = s:taboption("advanced", Value, "netmask",
|
mask = s:taboption("advanced", Value, "netmask",
|
||||||
translate("<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Netmask"),
|
translate("<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Netmask"),
|
||||||
translate("Override the netmask sent to clients. Normally it is calculated " ..
|
translate("Override the netmask sent to clients. Normally it is calculated " ..
|
||||||
"from the subnet that is served."))
|
"from the subnet that is served."))
|
||||||
|
|
||||||
mask.optional = true
|
mask.optional = true
|
||||||
mask.datatype = "ip4addr"
|
mask.datatype = "ip4addr"
|
||||||
|
|
||||||
s:taboption("advanced", DynamicList, "dhcp_option", translate("DHCP-Options"),
|
s:taboption("advanced", DynamicList, "dhcp_option", translate("DHCP-Options"),
|
||||||
translate("Define additional DHCP options, for example \"<code>6,192.168.2.1," ..
|
translate("Define additional DHCP options, for example \"<code>6,192.168.2.1," ..
|
||||||
"192.168.2.2</code>\" which advertises different DNS servers to clients."))
|
"192.168.2.2</code>\" which advertises different DNS servers to clients."))
|
||||||
|
|
||||||
for i, n in ipairs(s.children) do
|
for i, n in ipairs(s.children) do
|
||||||
if n ~= ignore then
|
if n ~= ignore then
|
||||||
n:depends("ignore", "")
|
n:depends("ignore", "")
|
||||||
end
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return m, m2
|
return m, m2
|
||||||
|
|
|
@ -12,6 +12,7 @@ You may obtain a copy of the License at
|
||||||
$Id$
|
$Id$
|
||||||
]]--
|
]]--
|
||||||
|
|
||||||
|
local fs = require "nixio.fs"
|
||||||
local nw = require "luci.model.network"
|
local nw = require "luci.model.network"
|
||||||
local fw = require "luci.model.firewall"
|
local fw = require "luci.model.firewall"
|
||||||
local uci = require "luci.model.uci".cursor()
|
local uci = require "luci.model.uci".cursor()
|
||||||
|
@ -19,6 +20,8 @@ local http = require "luci.http"
|
||||||
|
|
||||||
local iw = luci.sys.wifi.getiwinfo(http.formvalue("device"))
|
local iw = luci.sys.wifi.getiwinfo(http.formvalue("device"))
|
||||||
|
|
||||||
|
local has_firewall = fs.access("/etc/config/firewall")
|
||||||
|
|
||||||
if not iw then
|
if not iw then
|
||||||
luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless"))
|
luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless"))
|
||||||
return
|
return
|
||||||
|
@ -89,19 +92,23 @@ newnet = m:field(Value, "_netname_new", translate("Name of the new network"),
|
||||||
newnet.default = m.hidden.mode == "Ad-Hoc" and "mesh" or "wwan"
|
newnet.default = m.hidden.mode == "Ad-Hoc" and "mesh" or "wwan"
|
||||||
newnet.datatype = "uciname"
|
newnet.datatype = "uciname"
|
||||||
|
|
||||||
fwzone = m:field(Value, "_fwzone",
|
if has_firewall then
|
||||||
|
fwzone = m:field(Value, "_fwzone",
|
||||||
translate("Create / Assign firewall-zone"),
|
translate("Create / Assign firewall-zone"),
|
||||||
translate("Choose the firewall zone you want to assign to this interface. Select <em>unspecified</em> to remove the interface from the associated zone or fill out the <em>create</em> field to define a new zone and attach the interface to it."))
|
translate("Choose the firewall zone you want to assign to this interface. Select <em>unspecified</em> to remove the interface from the associated zone or fill out the <em>create</em> field to define a new zone and attach the interface to it."))
|
||||||
|
|
||||||
fwzone.template = "cbi/firewall_zonelist"
|
fwzone.template = "cbi/firewall_zonelist"
|
||||||
fwzone.default = m.hidden.mode == "Ad-Hoc" and "mesh" or "wan"
|
fwzone.default = m.hidden.mode == "Ad-Hoc" and "mesh" or "wan"
|
||||||
|
end
|
||||||
|
|
||||||
function newnet.parse(self, section)
|
function newnet.parse(self, section)
|
||||||
local net, zone
|
local net, zone
|
||||||
local value = self:formvalue(section)
|
|
||||||
local zval = fwzone:formvalue(section)
|
|
||||||
|
|
||||||
|
local value = self:formvalue(section)
|
||||||
net = nw:add_network(value, { proto = "dhcp" })
|
net = nw:add_network(value, { proto = "dhcp" })
|
||||||
|
|
||||||
|
if has_firewall then
|
||||||
|
local zval = fwzone:formvalue(section)
|
||||||
zone = fw:get_zone(zval)
|
zone = fw:get_zone(zval)
|
||||||
|
|
||||||
if not zone and zval == '-' then
|
if not zone and zval == '-' then
|
||||||
|
@ -110,6 +117,7 @@ function newnet.parse(self, section)
|
||||||
zone = fw:add_zone(zval)
|
zone = fw:add_zone(zval)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if not net then
|
if not net then
|
||||||
self.error = { [section] = "missing" }
|
self.error = { [section] = "missing" }
|
||||||
|
@ -165,10 +173,12 @@ function newnet.parse(self, section)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function fwzone.cfgvalue(self, section)
|
if has_firewall then
|
||||||
|
function fwzone.cfgvalue(self, section)
|
||||||
self.iface = section
|
self.iface = section
|
||||||
local z = fw:get_zone_by_network(section)
|
local z = fw:get_zone_by_network(section)
|
||||||
return z and z:name()
|
return z and z:name()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
|
Loading…
Reference in a new issue