local uci = require "luci.model.uci".cursor()
local tools = require "luci.tools.ffwizard"
local util = require "luci.util"
+local sys = require "luci.sys"
-------------------- View --------------------
client = f:field(Flag, "client", "WLAN-DHCP anbieten")
client:depends("wifi", "1")
client.rmempty = true
-function client.cfgvalue(self, section)
- return uci:get("freifunk", "wizard", "client")
-end
-function client.write(self, section, value)
- uci:set("freifunk", "wizard", "client", value)
- uci:save("freifunk")
-end
olsr = f:field(Flag, "olsr", "OLSR einrichten")
+olsr.rmempty = true
share = f:field(Flag, "sharenet", "Eigenen Internetzugang freigeben")
share.rmempty = true
-function share.cfgvalue(self, section)
- return uci:get("freifunk", "wizard", "sharenet")
-end
-function share.write(self, section, value)
- uci:set("freifunk", "wizard", "sharenet", value)
- uci:save("freifunk")
-end
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:foreach(external, "fw_rule", function(section)
uci:section("firewall", "rule", nil, section)
end)
+ end
+
+ -- Enforce firewall include
+ local has_include = false
+ uci:foreach("firewall", "include",
+ function(section)
+ if section.path == "/etc/firewall.freifunk" then
+ has_include = true
+ end
+ end)
- uci:save("firewall")
+ if not has_include then
+ uci:section("firewall", "include", nil,
+ { path = "/etc/firewall.freifunk" })
end
+ -- Allow state: invalid packets
+ uci:foreach("firewall", "defaults",
+ function(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)
+
+ luci.fs.writefile( "/proc/sys/kernel/hostname", new_hostname.."\n" )
+ 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
dest_port="67",
target="ACCEPT"
})
+ uci:delete_all("firewall", "rule", {
+ src="freifunk",
+ proto="tcp",
+ dest_port="8082",
+ })
+ uci:section("firewall", "rule", nil, {
+ src="freifunk",
+ proto="tcp",
+ dest_port="8082",
+ target="ACCEPT"
+ })