local uci = require "luci.model.uci".cursor()
local tools = require "luci.tools.ffwizard"
local util = require "luci.util"
+local sys = require "luci.sys"
-------------------- View --------------------
uci:save("wireless")
-- Create firewall zone and add default rules (first time)
- local newzone = tools.firewall_create_zone("freifunk", "DROP", "ACCEPT", "DROP", true)
+ local newzone = tools.firewall_create_zone("freifunk", "REJECT", "ACCEPT", "REJECT", true)
if newzone then
uci:foreach("freifunk", "fw_forwarding", function(section)
uci:section("firewall", "forwarding", nil, section)
uci:set("firewall", section[".name"], "drop_invalid", "0")
end)
+ -- Prepare advanced config
+ local has_advanced = false
+ uci:foreach("firewall", "advanced",
+ function(section) has_advanced = true end)
+
+ if not has_advanced then
+ uci:section("firewall", "advanced", nil,
+ { tcp_ecn = "0" })
+ end
+
uci:save("firewall")
- -- Crate network interface
+ -- Create network interface
local netconfig = uci:get_all("freifunk", "interface")
util.update(netconfig, uci:get_all(external, "interface") or {})
netconfig.proto = "static"
uci:save("network")
tools.firewall_zone_add_interface("freifunk", device)
+
+
+ -- Set hostname
+ local new_hostname = ip:gsub("%.", "-")
+ local old_hostname = sys.hostname()
+
+ if old_hostname == "OpenWrt" or old_hostname:match("^%d+-%d+-%d+-%d+$") then
+ uci:foreach("system", "system",
+ function(s)
+ uci:set("system", s['.name'], "hostname", new_hostname)
+ end)
+
+ sys.hostname(new_hostname)
+ uci:save("system")
+ end
end
local community = net:formvalue(section)
local external = community and uci:get("freifunk", community, "external") or ""
+ -- Configure nameservice
+ local hostname
+ uci:foreach("system", "system", function(s) hostname = s.hostname end)
+
+ if hostname then
+ uci:foreach("olsrd", "LoadPlugin",
+ function(s)
+ if s.library == "olsrd_nameservice.so.0.3" then
+ uci:set("olsrd", s['.name'], "name", hostname)
+ end
+ end)
+ end
+
-- Delete old interface
uci:delete_all("olsrd", "Interface", {interface=device})
olsrbase.ignore = "0"
uci:section("olsrd", "Interface", nil, olsrbase)
uci:save("olsrd")
+
+ -- Import hosts
+ uci:foreach("dhcp", "dnsmasq", function(s)
+ uci:set("dhcp", s[".name"], "addnhosts", "/var/etc/hosts.olsr")
+ end)
+ uci:save("dhcp")
end
function share.write(self, section, value)
uci:delete_all("firewall", "forwarding", {src="freifunk", dest="wan"})
+ uci:delete_all("olsrd", "LoadPlugin", {library="olsrd_dyn_gw_plain.so.0.4"})
if value == "1" then
uci:section("firewall", "forwarding", nil, {src="freifunk", dest="wan"})
+ uci:section("olsrd", "LoadPlugin", nil, {library="olsrd_dyn_gw_plain.so.0.4"})
end
uci:save("firewall")
+ uci:save("olsrd")
end