modules/admin-full: make menus work with no dnsmasq or firewall installed

This commit is contained in:
Jo-Philipp Wich 2010-11-23 00:11:00 +00:00
parent 9c3db58ee4
commit 1aa676d501
2 changed files with 132 additions and 110 deletions

View file

@ -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,8 +149,7 @@ 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."))
@ -176,6 +181,7 @@ function fwzone.write(self, section, value)
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"))
ipaddr.optional = true ipaddr.optional = true
@ -507,6 +513,11 @@ dns.optional = true
dns.datatype = "ip4addr" dns.datatype = "ip4addr"
--
-- Display DNS settings if dnsmasq is available
--
if has_dnsmasq then
m2 = Map("dhcp", "", "") m2 = Map("dhcp", "", "")
function m2.on_parse() function m2.on_parse()
local has_section = false local has_section = false
@ -592,5 +603,6 @@ for i, n in ipairs(s.children) do
n:depends("ignore", "") n:depends("ignore", "")
end end
end end
end
return m, m2 return m, m2

View file

@ -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"
if has_firewall then
fwzone = m:field(Value, "_fwzone", 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
if has_firewall then
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
end
return m return m