local ip = require "luci.ip"
local fs = require "nixio.fs"
-
local has_pptp = fs.access("/usr/sbin/pptp")
local has_pppoe = fs.glob("/usr/lib/pppd/*/rp-pppoe.so")()
local has_l2gvpn = fs.access("/usr/sbin/node")
local has_rom = fs.access("/rom/etc")
local has_autoipv6 = fs.access("/usr/bin/auto-ipv6")
local has_qos = fs.access("/etc/init.d/qos")
+local has_ipv6 = fs.access("/proc/sys/net/ipv6")
+local has_hb = fs.access("/sbin/heartbeat")
luci.i18n.loadc("freifunk")
net_lat:depends("net", "0")
net_lon = f:field(ListValue, "net_lon", "", "")
net_lon:depends("net", "0")
+
uci:foreach("freifunk", "community", function(s)
if s.latitude then
net_lat:value(s[".name"], "%s" % {s.latitude or "?"})
uci:save("freifunk")
end
end
- local meship6 = f:field(Value, "meship6_" .. device, device:upper() .. " Mesh IPv6 Adresse einrichten", "Ihre Mesh IP Adresse wird automatisch berechnet")
+ if has_ipv6 then
+ local meship6 = f:field(Value, "meship6_" .. device, device:upper() .. " Mesh IPv6 Adresse einrichten", "Ihre Mesh IP Adresse wird automatisch berechnet")
meship6:depends("device_" .. device, "1")
meship6.rmempty = true
function meship6.cfgvalue(self, section)
return get_ula(get_mac(device))
end
+ end
+
local client = f:field(Flag, "client_" .. device, device:upper() .. " DHCP anbieten", "DHCP weist verbundenen Benutzern automatisch eine Adresse zu. Diese Option sollten Sie unbedingt aktivieren, wenn Sie Nutzer an der drahtlosen Schnittstelle erwarten.")
client:depends("device_" .. device, "1")
client.rmempty = false
function meship.write(self, sec, value)
uci:set("freifunk", "wizard", "meship_" .. device, value)
end
- meship6 = f:field(Value, "meship6_" .. device, device:upper() .. " Mesh IPv6 Adresse einrichten", "Ihre Mesh IP Adresse wird automatisch berechnet")
+ if has_ipv6 then
+ meship6 = f:field(Value, "meship6_" .. device, device:upper() .. " Mesh IPv6 Adresse einrichten", "Ihre Mesh IP Adresse wird automatisch berechnet")
meship6:depends("device_" .. device, "1")
meship6.rmempty = true
function meship6.cfgvalue(self, section)
return get_ula(get_mac(ifname))
end
+ end
+
client = f:field(Flag, "client_" .. device, device:upper() .. " DHCP anbieten","DHCP weist verbundenen Benutzern automatisch eine Adresse zu. Diese Option sollten Sie unbedingt aktivieren, wenn Sie Nutzer an der drahtlosen Schnittstelle erwarten.")
client:depends("device_" .. device, "1")
client.rmempty = false
end
end
-hb = f:field(Flag, "hb", "Heartbeat aktivieren","Dem Gerät erlauben anonyme Statistiken zu übertragen. (empfohlen)")
-hb.rmempty = false
-hb:depends("netconfig", "1")
-function hb.cfgvalue(self, section)
- return uci:get("freifunk", "wizard", "hb")
-end
-function hb.write(self, section, value)
- uci:set("freifunk", "wizard", "hb", value)
- uci:save("freifunk")
+if has_hb then
+ hb = f:field(Flag, "hb", "Heartbeat aktivieren","Dem Gerät erlauben anonyme Statistiken zu übertragen. (empfohlen)")
+ hb.rmempty = false
+ hb:depends("netconfig", "1")
+ function hb.cfgvalue(self, section)
+ return uci:get("freifunk", "wizard", "hb")
+ end
+ function hb.write(self, section, value)
+ uci:set("freifunk", "wizard", "hb", value)
+ uci:save("freifunk")
+ end
end
-------------------- Control --------------------
if has_radvd then
uci:commit("radvd")
end
- luci.http.redirect(luci.dispatcher.build_url(unpack(luci.dispatcher.context.requested.path), "system", "reboot") .. "?reboot=1")
+-- the following line didn't work without admin-mini, for now i just replaced it with sys.exec... soma
+-- luci.http.redirect(luci.dispatcher.build_url(unpack(luci.dispatcher.context.requested.path), "system", "reboot") .. "?reboot=1")
+ sys.exec("reboot")
end
return false
elseif state == FORM_INVALID then
end
-- Collect IP-Address
local community = net:formvalue(section)
+ suffix = uci:get("freifunk", community, "suffix") or "olsr"
-- Invalidate fields
if not community then
end)
end
uci:save("firewall")
- uci:delete("manager", "heartbeat", "interface")
- uci:save("manager")
+ if has_hb then
+ uci:delete("manager", "heartbeat", "interface")
+ uci:save("manager")
+ end
-- Delete olsrdv4
uci:delete_all("olsrd", "olsrd")
local olsrbase
olsrbase = uci:get_all("freifunk", "olsrd") or {}
util.update(olsrbase, uci:get_all(external, "olsrd") or {})
- olsrbase.IpVersion='6and4'
+ if has_ipv6 then
+ olsrbase.IpVersion='6and4'
+ else
+ olsrbase.IpVersion='4'
+ end
uci:section("olsrd", "olsrd", nil, olsrbase)
-- Delete olsrdv4 old p2pd settings
uci:delete_all("olsrd", "LoadPlugin", {library="olsrd_mdns.so.1.0.0"})
return
end
node_ip = luci.http.formvalue("cbid.ffwizward.1.meship_" .. device) and ip.IPv4(luci.http.formvalue("cbid.ffwizward.1.meship_" .. device))
- node_ip6 = luci.http.formvalue("cbid.ffwizward.1.meship6_" .. device) and ip.IPv6(luci.http.formvalue("cbid.ffwizward.1.meship6_" .. device))
+ if has_ipv6 then
+ node_ip6 = luci.http.formvalue("cbid.ffwizward.1.meship6_" .. device) and ip.IPv6(luci.http.formvalue("cbid.ffwizward.1.meship6_" .. device))
+ end
if not node_ip or not network or not network:contains(node_ip) then
meship.tag_missing[section] = true
node_ip = nil
util.update(netconfig, uci:get_all(external, "interface") or {})
netconfig.proto = "static"
netconfig.ipaddr = node_ip:string()
- netconfig.ip6addr = node_ip6:string()
+ if has_ipv6 then
+ netconfig.ip6addr = node_ip6:string()
+ end
uci:section("network", "interface", nif, netconfig)
if has_radvd then
uci:section("radvd", "interface", nil, {
local client = luci.http.formvalue("cbid.ffwizward.1.client_" .. device)
if client then
local dhcpmeshnet = luci.http.formvalue("cbid.ffwizward.1.dhcpmesh_" .. device) and ip.IPv4(luci.http.formvalue("cbid.ffwizward.1.dhcpmesh_" .. device))
- local ifacelist = uci:get_list("manager", "heartbeat", "interface") or {}
- table.insert(ifacelist,nif .. "dhcp")
- uci:set_list("manager", "heartbeat", "interface", ifacelist)
- uci:save("manager")
+ if has_hb then
+ local ifacelist = uci:get_list("manager", "heartbeat", "interface") or {}
+ table.insert(ifacelist,nif .. "dhcp")
+ uci:set_list("manager", "heartbeat", "interface", ifacelist)
+ uci:save("manager")
+ end
if dhcpmeshnet then
if not dhcpmeshnet:minhost() or not dhcpmeshnet:mask() then
dhcpmesh.tag_missing[section] = true
if device ~= "loopback" and not string.find(device, "wifi") and not string.find(device, "wl") and not string.find(device, "wlan") and not string.find(device, "wireless") and not string.find(device, "radio") then
local node_ip
node_ip = luci.http.formvalue("cbid.ffwizward.1.meship_" .. device) and ip.IPv4(luci.http.formvalue("cbid.ffwizward.1.meship_" .. device))
- node_ip6 = luci.http.formvalue("cbid.ffwizward.1.meship6_" .. device) and ip.IPv6(luci.http.formvalue("cbid.ffwizward.1.meship6_" .. device))
+ if has_ipv6 then
+ node_ip6 = luci.http.formvalue("cbid.ffwizward.1.meship6_" .. device) and ip.IPv6(luci.http.formvalue("cbid.ffwizward.1.meship6_" .. device))
+ end
if not node_ip or not network or not network:contains(node_ip) then
meship.tag_missing[section] = true
node_ip = nil
util.update(netconfig, uci:get_all(external, "interface") or {})
netconfig.proto = "static"
netconfig.ipaddr = node_ip:string()
- netconfig.ip6addr = node_ip6:string()
+ if has_ipv6 then
+ netconfig.ip6addr = node_ip6:string()
+ end
uci:section("network", "interface", device, netconfig)
uci:save("network")
if has_radvd then
local client = luci.http.formvalue("cbid.ffwizward.1.client_" .. device)
if client then
local dhcpmeshnet = luci.http.formvalue("cbid.ffwizward.1.dhcpmesh_" .. device) and ip.IPv4(luci.http.formvalue("cbid.ffwizward.1.dhcpmesh_" .. device))
- local ifacelist = uci:get_list("manager", "heartbeat", "interface") or {}
- table.insert(ifacelist,device .. "dhcp")
- uci:set_list("manager", "heartbeat", "interface", ifacelist)
- uci:save("manager")
+ if has_hb then
+ local ifacelist = uci:get_list("manager", "heartbeat", "interface") or {}
+ table.insert(ifacelist,device .. "dhcp")
+ uci:set_list("manager", "heartbeat", "interface", ifacelist)
+ uci:save("manager")
+ end
if dhcpmeshnet then
if not dhcpmeshnet:minhost() or not dhcpmeshnet:mask() then
dhcpmesh.tag_missing[section] = true
local new_hostname = uci:get("freifunk", "wizard", "hostname")
local old_hostname = sys.hostname()
- local dhcphb = hb:formvalue(section)
- if dhcphb then
- uci:set("manager", "heartbeat", "enabled", "1")
- -- Make sure that heartbeat is enabled
- sys.init.enable("machash")
-
- else
- uci:set("manager", "heartbeat", "enabled", "0")
- -- Make sure that heartbeat is enabled
- sys.init.disable("machash")
+ if has_hb then
+ local dhcphb = hb:formvalue(section)
+ if dhcphb then
+ uci:set("manager", "heartbeat", "enabled", "1")
+ -- Make sure that heartbeat is enabled
+ sys.init.enable("machash")
+ else
+ uci:set("manager", "heartbeat", "enabled", "0")
+ -- Make sure that heartbeat is enabled
+ sys.init.disable("machash")
+ end
+ uci:save("manager")
end
- uci:save("manager")
local custom_hostname = hostname:formvalue(section)
uci:foreach("system", "system",
-- Write new nameservice settings
uci:section("olsrd", "LoadPlugin", nil, {
library = "olsrd_nameservice.so.0.3",
- suffix = ".olsr",
+ suffix = "." .. suffix ,
hosts_file = "/var/etc/hosts.olsr",
latlon_file = "/var/run/latlon.js",
lat = latval and string.format("%.15f", latval) or "",
-- Import hosts and set domain
uci:foreach("dhcp", "dnsmasq", function(s)
uci:set_list("dhcp", s[".name"], "addnhosts", "/var/etc/hosts.olsr")
- uci:set("dhcp", s[".name"], "local", "/olsr/")
- uci:set("dhcp", s[".name"], "domain", "olsr")
+ uci:set("dhcp", s[".name"], "local", "/" .. suffix .. "/")
+ uci:set("dhcp", s[".name"], "domain", suffix)
end)
-- Make sure that OLSR is enabled
uci:save("olsrd")
uci:save("dhcp")
-- Import hosts and set domain
- uci:foreach("dhcp", "dnsmasq", function(s)
- uci:set_list("dhcp", s[".name"], "addnhosts", {"/var/etc/hosts.olsr","/var/etc/hosts.olsr.ipv6"})
- end)
+ if has_ipv6 then
+ uci:foreach("dhcp", "dnsmasq", function(s)
+ uci:set_list("dhcp", s[".name"], "addnhosts", {"/var/etc/hosts.olsr","/var/etc/hosts.olsr.ipv6"})
+ end)
+ else
+ uci:foreach("dhcp", "dnsmasq", function(s)
+ uci:set_list("dhcp", s[".name"], "addnhosts", "/var/etc/hosts.olsr")
+ end)
+ end
uci:save("dhcp")
if share_value == "1" then
uci:set("freifunk", "wizard", "netconfig", "1")
uci:section("firewall", "forwarding", nil, {src="freifunk", dest="wan"})
- -- Set autoipv6 tunnel mode
- uci:set("autoipv6", "olsr_node", "enable", "0")
- uci:set("autoipv6", "tunnel", "enable", "1")
- uci:save("autoipv6")
+
+ if has_autoipv6 then
+ -- Set autoipv6 tunnel mode
+ uci:set("autoipv6", "olsr_node", "enable", "0")
+ uci:set("autoipv6", "tunnel", "enable", "1")
+ uci:save("autoipv6")
+ end
+
-- Delete/Disable gateway plugin
uci:delete_all("olsrd", "LoadPlugin", {library="olsrd_dyn_gw.so.0.5"})
uci:delete_all("olsrd", "LoadPlugin", {library="olsrd_dyn_gw_plain.so.0.4"})
else
uci:set("freifunk", "wizard", "netconfig", "0")
uci:save("freifunk")
- -- Set autoipv6 olsrd mode
- uci:set("autoipv6", "olsr_node", "enable", "1")
- uci:set("autoipv6", "tunnel", "enable", "0")
- uci:save("autoipv6")
+ if has_autoipv6 then
+ -- Set autoipv6 olsrd mode
+ uci:set("autoipv6", "olsr_node", "enable", "1")
+ uci:set("autoipv6", "tunnel", "enable", "0")
+ uci:save("autoipv6")
+ end
-- Delete gateway plugins
uci:delete_all("olsrd", "LoadPlugin", {library="olsrd_dyn_gw.so.0.5"})
uci:delete_all("olsrd", "LoadPlugin", {library="olsrd_dyn_gw_plain.so.0.4"})
return TypedSection.remove(self, section)
end
+o = s:option(Flag, "ignore", translate("Enable"))
+o.rmempty = false
+o.width = "30px"
+function o.cfgvalue(...)
+ local v = Flag.cfgvalue(...)
+ return v == "1" and "0" or "1"
+end
+function o.write(self, section, value)
+ Flag.write(self, section, value == "1" and "0" or "1")
+end
o = s:option(DummyValue, "interface", translate("Interface"))
o.template = "cbi/network_netinfo"
+o.width = "10%"
o = s:option(DummyValue, "UnicastOnly", translate("Multicast"))
function o.cfgvalue(...)
end
+o = s2:option(Flag, "ignore", translate("Enable"))
+o.rmempty = false
+o.width = "30px"
+function o.cfgvalue(...)
+ local v = Flag.cfgvalue(...)
+ return v == "1" and "0" or "1"
+end
+function o.write(self, section, value)
+ Flag.write(self, section, value == "1" and "0" or "1")
+end
+
o = s2:option(DummyValue, "interface", translate("Interface"))
o.template = "cbi/network_netinfo"
+o.width = "10%"
o = s2:option(DummyValue, "prefix", translate("Prefix"))
+o.width = "60%"
function o.cfgvalue(self, section)
local v = Value.cfgvalue(self, section)
if not v then
end
+o = s3:option(Flag, "ignore", translate("Enable"))
+o.rmempty = false
+o.width = "30px"
+function o.cfgvalue(...)
+ local v = Flag.cfgvalue(...)
+ return v == "1" and "0" or "1"
+end
+function o.write(self, section, value)
+ Flag.write(self, section, value == "1" and "0" or "1")
+end
+
o = s3:option(DummyValue, "interface", translate("Interface"))
o.template = "cbi/network_netinfo"
+o.width = "10%"
o = s3:option(DummyValue, "prefix", translate("Prefix"))
+o.width = "60%"
function o.cfgvalue(self, section)
local v = Value.cfgvalue(self, section)
if v then
end
+o = s4:option(Flag, "ignore", translate("Enable"))
+o.rmempty = false
+o.width = "30px"
+function o.cfgvalue(...)
+ local v = Flag.cfgvalue(...)
+ return v == "1" and "0" or "1"
+end
+function o.write(self, section, value)
+ Flag.write(self, section, value == "1" and "0" or "1")
+end
+
o = s4:option(DummyValue, "interface", translate("Interface"))
o.template = "cbi/network_netinfo"
+o.width = "10%"
o = s4:option(DummyValue, "addr", translate("Address"))
+o.width = "60%"
function o.cfgvalue(self, section)
local v = Value.cfgvalue(self, section)
if not v then