applications/ffwizard: Massive changes to the ffwizard to make it more generic. Also introduces changes to the community profiles. ffwizard replaces ffwizard-leipzig now. It is not completely finished yet, but should work in most cases.

This commit is contained in:
Manuel Munz 2011-01-25 21:04:57 +00:00
parent 9c03a76fc2
commit c36fd44de2
64 changed files with 816 additions and 1442 deletions

View file

@ -1,4 +0,0 @@
PO =
include ../../build/config.mk
include ../../build/module.mk

View file

@ -1,21 +0,0 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id$
]]--
module "luci.controller.ffwizard"
function index()
entry({"admin", "freifunk", "ffwizard"}, form("ffwizard"), "Freifunkassistent", 50)
end

View file

@ -1,493 +0,0 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id$
]]--
local uci = require "luci.model.uci".cursor()
local tools = require "luci.tools.ffwizard"
local util = require "luci.util"
local sys = require "luci.sys"
local ip = require "luci.ip"
local function mksubnet(community, meship)
local subnet_prefix = tonumber(uci:get("freifunk", community, "splash_prefix")) or 27
local pool_network = uci:get("freifunk", community, "splash_network") or "10.104.0.0/16"
local pool = luci.ip.IPv4(pool_network)
if pool then
local hosts_per_subnet = 2^(32 - subnet_prefix)
local number_of_subnets = (2^pool:prefix())/hosts_per_subnet
local seed1, seed2 = meship:match("(%d+)%.(%d+)$")
math.randomseed(seed1 * seed2)
local subnet = pool:add(hosts_per_subnet * math.random(number_of_subnets))
local subnet_ipaddr = subnet:network(subnet_prefix):add(1):string()
local subnet_netmask = subnet:mask(subnet_prefix):string()
return subnet_ipaddr, subnet_netmask
end
end
-------------------- View --------------------
f = SimpleForm("ffwizward", "Freifunkassistent",
"Dieser Assistent unterstüzt bei der Einrichtung des Routers für das Freifunknetz.")
dev = f:field(ListValue, "device", "WLAN-Gerät")
uci:foreach("wireless", "wifi-device",
function(section)
dev:value(section[".name"])
end)
main = f:field(Flag, "wifi", "Freifunkzugang einrichten")
net = f:field(Value, "net", "Freifunk Community", "Mesh Netzbereich")
net.rmempty = true
net:depends("wifi", "1")
uci:foreach("freifunk", "community", function(s)
net:value(s[".name"], "%s (%s)" % {s.name, s.mesh_network or "?"})
end)
function net.cfgvalue(self, section)
return uci:get("freifunk", "wizard", "net")
end
function net.write(self, section, value)
uci:set("freifunk", "wizard", "net", value)
uci:save("freifunk")
end
meship = f:field(Value, "meship", "Mesh IP Adresse", "Netzweit eindeutige Identifikation")
meship.rmempty = true
meship:depends("wifi", "1")
function meship.cfgvalue(self, section)
return uci:get("freifunk", "wizard", "meship")
end
function meship.write(self, section, value)
uci:set("freifunk", "wizard", "meship", value)
uci:save("freifunk")
end
function meship.validate(self, value)
local x = ip.IPv4(value)
return ( x and x:prefix() == 32 ) and x:string() or ""
end
client = f:field(Flag, "client", "WLAN-DHCP anbieten")
client:depends("wifi", "1")
client.rmempty = false
function client.cfgvalue(self, section)
return uci:get("freifunk", "wizard", "dhcp_splash") or "0"
end
olsr = f:field(Flag, "olsr", "OLSR einrichten")
olsr.rmempty = true
lat = f:field(Value, "lat", "Latitude")
lat:depends("olsr", "1")
function lat.cfgvalue(self, section)
return uci:get("freifunk", "wizard", "latitude")
end
function lat.write(self, section, value)
uci:set("freifunk", "wizard", "latitude", value)
uci:save("freifunk")
end
lon = f:field(Value, "lon", "Longitude")
lon:depends("olsr", "1")
function lon.cfgvalue(self, section)
return uci:get("freifunk", "wizard", "longitude")
end
function lon.write(self, section, value)
uci:set("freifunk", "wizard", "longitude", value)
uci:save("freifunk")
end
share = f:field(Flag, "sharenet", "Eigenen Internetzugang freigeben")
share.rmempty = true
wansec = f:field(Flag, "wansec", "WAN-Zugriff auf Gateway beschränken")
wansec.rmempty = false
wansec:depends("sharenet", "1")
function wansec.cfgvalue(self, section)
return uci:get("freifunk", "wizard", "wan_security")
end
function wansec.write(self, section, value)
uci:set("freifunk", "wizard", "wan_security", value)
uci:save("freifunk")
end
-------------------- Control --------------------
function f.handle(self, state, data)
if state == FORM_VALID then
luci.http.redirect(luci.dispatcher.build_url("admin", "uci", "changes"))
return false
elseif state == FORM_INVALID then
self.errmessage = "Ungültige Eingabe: Bitte die Formularfelder auf Fehler prüfen."
end
return true
end
local function _strip_internals(tbl)
tbl = tbl or {}
for k, v in pairs(tbl) do
if k:sub(1, 1) == "." then
tbl[k] = nil
end
end
return tbl
end
-- Configure Freifunk checked
function main.write(self, section, value)
if value == "0" then
return
end
local device = dev:formvalue(section)
local node_ip, external
-- Collect IP-Address
local community = net:formvalue(section)
-- Invalidate fields
if not community then
net.tag_missing[section] = true
else
external = uci:get("freifunk", community, "external") or ""
network = ip.IPv4(uci:get("freifunk", community, "mesh_network") or "104.0.0.0/8")
node_ip = meship:formvalue(section) and ip.IPv4(meship:formvalue(section))
if not node_ip or not network or not network:contains(node_ip) then
meship.tag_missing[section] = true
node_ip = nil
end
end
if not node_ip then return end
-- Cleanup
tools.wifi_delete_ifaces(device)
tools.network_remove_interface(device)
tools.firewall_zone_remove_interface("freifunk", device)
-- Tune community settings
if community and uci:get("freifunk", community) then
uci:tset("freifunk", "community", uci:get_all("freifunk", community))
end
-- Tune wifi device
local devconfig = uci:get_all("freifunk", "wifi_device")
util.update(devconfig, uci:get_all(external, "wifi_device") or {})
uci:tset("wireless", device, devconfig)
-- Create wifi iface
local ifconfig = uci:get_all("freifunk", "wifi_iface")
util.update(ifconfig, uci:get_all(external, "wifi_iface") or {})
ifconfig.device = device
ifconfig.network = device
ifconfig.ssid = uci:get("freifunk", community, "ssid")
uci:section("wireless", "wifi-iface", nil, ifconfig)
-- Save wifi
uci:save("wireless")
-- Create firewall zone and add default rules (first time)
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)
end)
uci:foreach(external, "fw_forwarding", function(section)
uci:section("firewall", "forwarding", nil, section)
end)
uci:foreach("freifunk", "fw_rule", function(section)
uci:section("firewall", "rule", nil, section)
end)
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)
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", ip_conntrack_max = "8192", tcp_westwood = "1" })
end
uci:save("firewall")
-- Create network interface
local netconfig = uci:get_all("freifunk", "interface")
util.update(netconfig, uci:get_all(external, "interface") or {})
netconfig.proto = "static"
netconfig.ipaddr = node_ip:string()
uci:section("network", "interface", device, netconfig)
uci:save("network")
tools.firewall_zone_add_interface("freifunk", device)
local new_hostname = node_ip:string():gsub("%.", "-")
local old_hostname = sys.hostname()
uci:foreach("system", "system",
function(s)
-- Make crond silent
uci:set("system", s['.name'], "cronloglevel", "10")
-- Set hostname
if old_hostname == "OpenWrt" or old_hostname:match("^%d+-%d+-%d+-%d+$") then
uci:set("system", s['.name'], "hostname", new_hostname)
sys.hostname(new_hostname)
end
end)
uci:save("system")
end
function olsr.write(self, section, value)
if value == "0" then
return
end
local device = dev:formvalue(section)
local community = net:formvalue(section)
local external = community and uci:get("freifunk", community, "external") or ""
local latval = tonumber(lat:formvalue(section))
local lonval = tonumber(lon:formvalue(section))
-- Delete old interface
uci:delete_all("olsrd", "Interface", {interface=device})
-- Write new interface
local olsrbase = uci:get_all("freifunk", "olsr_interface")
util.update(olsrbase, uci:get_all(external, "olsr_interface") or {})
olsrbase.interface = device
olsrbase.ignore = "0"
uci:section("olsrd", "Interface", nil, olsrbase)
-- Delete old watchdog settings
uci:delete_all("olsrd", "LoadPlugin", {library="olsrd_watchdog.so.0.1"})
-- Write new watchdog settings
uci:section("olsrd", "LoadPlugin", nil, {
library = "olsrd_watchdog.so.0.1",
file = "/var/run/olsrd.watchdog",
interval = "30"
})
-- Delete old nameservice settings
uci:delete_all("olsrd", "LoadPlugin", {library="olsrd_nameservice.so.0.3"})
-- Write new nameservice settings
uci:section("olsrd", "LoadPlugin", nil, {
library = "olsrd_nameservice.so.0.3",
suffix = ".olsr",
hosts_file = "/var/etc/hosts.olsr",
latlon_file = "/var/run/latlon.js",
lat = latval and string.format("%.15f", latval) or "",
lon = lonval and string.format("%.15f", lonval) or ""
})
-- Save latlon to system too
if latval and lonval then
uci:foreach("system", "system", function(s)
uci:set("system", s[".name"], "latlon",
string.format("%.15f %.15f", latval, lonval))
end)
else
uci:foreach("system", "system", function(s)
uci:delete("system", s[".name"], "latlon")
end)
end
-- Import hosts
uci:foreach("dhcp", "dnsmasq", function(s)
uci:set("dhcp", s[".name"], "addnhosts", "/var/etc/hosts.olsr")
end)
-- Make sure that OLSR is enabled
sys.exec("/etc/init.d/olsrd enable")
uci:save("olsrd")
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"})
uci:foreach("firewall", "zone",
function(s)
if s.name == "wan" then
uci:delete("firewall", s['.name'], "local_restrict")
return false
end
end)
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"})
if wansec:formvalue(section) == "1" then
uci:foreach("firewall", "zone",
function(s)
if s.name == "wan" then
uci:set("firewall", s['.name'], "local_restrict", "1")
return false
end
end)
end
end
uci:save("firewall")
uci:save("olsrd")
uci:save("system")
end
function client.write(self, section, value)
if value == "0" then
uci:delete("freifunk", "wizard", "dhcp_splash")
uci:save("freifunk")
return
end
local device = dev:formvalue(section)
-- Collect IP-Address
local node_ip = meship:formvalue(section)
if not node_ip then return end
local community = net:formvalue(section)
local external = community and uci:get("freifunk", community, "external") or ""
local splash_ip, splash_mask = mksubnet(community, node_ip)
-- Delete old alias
uci:delete("network", device .. "dhcp")
-- Create alias
local aliasbase = uci:get_all("freifunk", "alias")
util.update(aliasbase, uci:get_all(external, "alias") or {})
aliasbase.interface = device
aliasbase.ipaddr = splash_ip
aliasbase.netmask = splash_mask
aliasbase.proto = "static"
uci:section("network", "alias", device .. "dhcp", aliasbase)
uci:save("network")
-- Create dhcp
local dhcpbase = uci:get_all("freifunk", "dhcp")
util.update(dhcpbase, uci:get_all(external, "dhcp") or {})
dhcpbase.interface = device .. "dhcp"
dhcpbase.start = dhcpbeg
dhcpbase.limit = limit
dhcpbase.force = 1
uci:section("dhcp", "dhcp", device .. "dhcp", dhcpbase)
uci:save("dhcp")
uci:delete_all("firewall", "rule", {
src="freifunk",
proto="udp",
dest_port="53"
})
uci:section("firewall", "rule", nil, {
src="freifunk",
proto="udp",
dest_port="53",
target="ACCEPT"
})
uci:delete_all("firewall", "rule", {
src="freifunk",
proto="udp",
src_port="68",
dest_port="67"
})
uci:section("firewall", "rule", nil, {
src="freifunk",
proto="udp",
src_port="68",
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"
})
uci:save("firewall")
-- Delete old splash
uci:delete_all("luci_splash", "iface", {network=device.."dhcp", zone="freifunk"})
-- Register splash
uci:section("luci_splash", "iface", nil, {network=device.."dhcp", zone="freifunk"})
uci:save("luci_splash")
-- Make sure that luci_splash is enabled
sys.exec("/etc/init.d/luci_splash enable")
-- Remember state
uci:set("freifunk", "wizard", "dhcp_splash", "1")
uci:save("freifunk")
end
return f

View file

@ -1,149 +0,0 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id$
]]--
local uci = require "luci.model.uci"
local util = require "luci.util"
local table = require "table"
local type = type
module "luci.tools.ffwizard"
-- Deletes all references of a wifi device
function wifi_delete_ifaces(device)
local cursor = uci.cursor()
cursor:delete_all("wireless", "wifi-iface", {device=device})
cursor:save("wireless")
end
-- Deletes a network interface and all occurences of it in firewall zones and dhcp
function network_remove_interface(iface)
local cursor = uci.cursor()
if not cursor:delete("network", iface) then
return false
end
local aliases = {iface}
cursor:foreach("network", "alias",
function(section)
if section.interface == iface then
table.insert(aliases, section[".name"])
end
end)
-- Delete Aliases and Routes
cursor:delete_all("network", "route", {interface=iface})
cursor:delete_all("network", "alias", {interface=iface})
-- Delete DHCP sections
cursor:delete_all("dhcp", "dhcp",
function(section)
return util.contains(aliases, section.interface)
end)
-- Remove OLSR sections
cursor:delete_all("olsrd", "Interface", {Interface=iface})
-- Remove Splash sections
cursor:delete_all("luci-splash", "iface", {network=iface})
cursor:save("network")
cursor:save("olsr")
cursor:save("dhcp")
cursor:save("luci-splash")
end
-- Creates a firewall zone
function firewall_create_zone(zone, input, output, forward, masq)
local cursor = uci.cursor()
if not firewall_find_zone(zone) then
local stat = cursor:section("firewall", "zone", nil, {
input = input,
output = output,
forward = forward,
masq = masq and "1",
name = zone
})
cursor:save("firewall")
return stat
end
end
-- Adds interface to zone, creates zone on-demand
function firewall_zone_add_interface(name, interface)
local cursor = uci.cursor()
local zone = firewall_find_zone(name)
local net = cursor:get("firewall", zone, "network")
local old = net or (cursor:get("network", name) and name)
cursor:set("firewall", zone, "network", (old and old .. " " or "") .. interface)
cursor:save("firewall")
end
-- Removes interface from zone
function firewall_zone_remove_interface(name, interface)
local cursor = uci.cursor()
local zone = firewall_find_zone(name)
if zone then
local net = cursor:get("firewall", zone, "network")
local new = remove_list_entry(net, interface)
if new then
if #new > 0 then
cursor:set("firewall", zone, "network", new)
else
cursor:delete("firewall", zone, "network")
end
cursor:save("firewall")
end
end
end
-- Finds the firewall zone with given name
function firewall_find_zone(name)
local find
uci.cursor():foreach("firewall", "zone",
function (section)
if section.name == name then
find = section[".name"]
end
end)
return find
end
-- Helpers --
-- Removes a listentry, handles real and pseduo lists transparently
function remove_list_entry(value, entry)
if type(value) == "nil" then
return nil
end
local result = type(value) == "table" and value or util.split(value, " ")
local key = util.contains(result, entry)
while key do
table.remove(result, key)
key = util.contains(result, entry)
end
result = type(value) == "table" and result or table.concat(result, " ")
return result ~= value and result
end

View file

@ -18,6 +18,10 @@ $Id$
module "luci.controller.ffwizard"
function index()
entry({"admin", "freifunk", "ffwizard"}, form("ffwizard"), "Freifunkassistent", 1)
assign({"mini", "freifunk", "ffwizard"}, {"admin", "freifunk", "ffwizard"}, "Freifunkassistent", 1)
end
entry({"admin", "freifunk", "ffwizard"}, form("freifunk/ffwizard"), "Freifunkassistent", 40)
assign({"mini", "freifunk", "ffwizard"}, {"admin", "freifunk", "ffwizard"}, "Freifunkassistent", 40)
entry({"admin", "freifunk", "ffwizard_error"}, template("freifunk/ffwizard_error"))
assign({"mini", "freifunk", "ffwizard_error"}, {"admin", "freifunk", "ffwizard_error"})
end

View file

@ -4,15 +4,13 @@ LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Copyright 2011 Patrick Grimm <patrick@pberg.freifunk.net>
Copyright 2011 Manuel Munz <freifunk at somakoma dot de>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id$
]]--
@ -33,9 +31,19 @@ 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")
local community = "profile_" .. (uci:get("freifunk", "community", "name") or "na")
local lat = uci:get_first("system", "system", "latitude")
local lon = uci:get_first("system", "system", "longitude")
local suffix = uci:get_first(community, "community", "suffix") or "olsr"
luci.i18n.loadc("freifunk")
-- Check if all necessary variables are available
if not (community ~= "profile_na" and lat and lon) then
luci.http.redirect(luci.dispatcher.build_url(unpack(luci.dispatcher.context.requested.path), "freifunk", "ffwizard_error"))
return
end
function get_mac(ix)
if string.find(ix, "radio") then
ix = string.gsub(ix,"radio", 'wlan')
@ -52,6 +60,7 @@ function get_mac(ix)
end
return "?"
end
function get_ula(imac)
if string.len(imac) == 17 then
local mac1 = string.sub(imac,4,8)
@ -62,6 +71,33 @@ function get_ula(imac)
return "?"
end
function gen_dhcp_range(n)
local subnet_prefix = tonumber(uci:get_first(community, "community", "splash_prefix")) or 27
local pool_network = uci:get_first(community, "community", "splash_network") or "10.104.0.0/16"
local pool = luci.ip.IPv4(pool_network)
local ip = tostring(n)
if pool and ip then
local hosts_per_subnet = 2^(32 - subnet_prefix)
local number_of_subnets = (2^pool:prefix())/hosts_per_subnet
local seed1, seed2 = ip:match("(%d+)%.(%d+)$")
if seed1 and seed2 then
math.randomseed((seed1+1)*(seed2+1))
end
local subnet = pool:add(hosts_per_subnet * math.random(number_of_subnets))
dhcp_ip = subnet:network(subnet_prefix):add(1):string()
dhcp_mask = subnet:mask(subnet_prefix):string()
end
return "?"
end
function hbconf(dev)
if has_hb then
local ifacelist = uci:get_list("manager", "heartbeat", "interface") or {}
table.insert(ifacelist,dev .. "dhcp")
uci:set_list("manager", "heartbeat", "interface", ifacelist)
uci:save("manager")
end
end
-------------------- View --------------------
f = SimpleForm("ffwizward", "Freifunkassistent",
@ -82,80 +118,31 @@ if sys.exec("diff /rom/etc/passwd /etc/passwd") == "" then
end
end
net = f:field(ListValue, "net", "Freifunk Community", "Nutzen Sie die Einstellungen der Freifunk Gemeinschaft in ihrer Nachbarschaft.")
net.rmempty = false
net.optional = false
uci:foreach("freifunk", "community", function(s)
net:value(s[".name"], "%s (%s)" % {s.name, s.mesh_network or "?"})
end)
function net.cfgvalue(self, section)
return uci:get("freifunk", "wizard", "net")
end
function net.write(self, section, value)
uci:set("freifunk", "wizard", "net", value)
uci:save("freifunk")
end
net_lat = f:field(ListValue, "net_lat", "", "")
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 "?"})
end
if s.longitude then
net_lon:value(s[".name"], "%s" % {s.longitude or "?"})
end
end)
-- hostname
hostname = f:field(Value, "hostname", "Knoten Name", "Geben Sie Ihrem Freifunk Router einen Namen. Wenn Sie dieses Feld leer lassen, wird der Name automatisch aus der Mesh IP generiert.")
hostname.rmempty = true
hostname.optional = false
function hostname.cfgvalue(self, section)
return sys.hostname()
end
function hostname.write(self, section, value)
uci:set("freifunk", "wizard", "hostname", value)
uci:save("freifunk")
end
function hostname.validate(self, value)
if (#value > 24) or string.find(value, "[^%w%.%-]") or string.find(string.sub(value, value:len()), "[%.%-]") or string.find(string.sub(value, 1), "[%.%-]") then
return
else
return value
end
end
-- location
location = f:field(Value, "location", "Standort", "Geben Sie den Standort ihres Gerätes an")
location.rmempty = false
location.optional = false
function location.cfgvalue(self, section)
return uci:get("freifunk", "contact", "location")
end
function location.write(self, section, value)
uci:set("freifunk", "contact", "location", value)
uci:save("freifunk")
end
-- mail
mail = f:field(Value, "mail", "E-Mail", "Bitte hinterlegen Sie eine Kontaktadresse.")
mail.rmempty = false
mail.optional = false
function mail.cfgvalue(self, section)
return uci:get("freifunk", "contact", "mail")
end
function mail.write(self, section, value)
uci:set("freifunk", "contact", "mail", value)
uci:save("freifunk")
end
-- main netconfig
local cc = uci:get(community, "wifi_device", "country") or "DE"
main = f:field(Flag, "netconfig", "Netzwerk einrichten", "Setzen Sie den Haken, wenn Sie Ihr Freifunk Netzwerk einrichten wollen.")
uci:foreach("wireless", "wifi-device",
function(section)
local device = section[".name"]
local hwtype = section.type
local syscc = uci:get("wireless", device, "country")
if not syscc then
if hwtype == "atheros" then
cc = sys.exec("grep -i '" .. cc .. "' /lib/wifi/cc_translate.txt |cut -d ' ' -f 2") or 0
sys.exec("echo " .. cc .. " > /proc/sys/dev/" .. device .. "/countrycode")
elseif hwtype == "mac80211" then
sys.exec("iw reg set " .. cc)
elseif hwtype == "broadcom" then
-- verify that ot works!
sys.exec ("wlc country " .. cc)
end
else
cc = syscc
end
local dev = f:field(Flag, "device_" .. device , "<b>Drahtloses Netzwerk \"" .. device:upper() .. "\"</b> ", "Konfigurieren Sie Ihre drahtlose " .. device:upper() .. "Schnittstelle (WLAN).")
dev:depends("netconfig", "1")
dev.rmempty = false
@ -189,7 +176,7 @@ uci:foreach("wireless", "wifi-device",
end
end
local meship = f:field(Value, "meship_" .. device, device:upper() .. " Mesh IP Adresse einrichten", "Ihre Mesh IP Adresse erhalten Sie von der Freifunk Gemeinschaft in Ihrer Nachbarschaft. Es ist eine netzweit eindeutige Identifikation, z.B. 104.1.1.1.")
local meship = f:field(Value, "meship_" .. device, device:upper() .. " Mesh IP Adresse einrichten", "Ihre Mesh IP Adresse erhalten Sie von der Freifunk Gemeinschaft in Ihrer Nachbarschaft. Es ist eine netzweit eindeutige Identifikation, z.B. 104.1.1.1.")
meship:depends("device_" .. device, "1")
meship.rmempty = true
function meship.cfgvalue(self, section)
@ -201,12 +188,6 @@ uci:foreach("wireless", "wifi-device",
end
function meship.write(self, sec, value)
uci:set("freifunk", "wizard", "meship_" .. device, value)
local new_ip = ip.IPv4(value)
if new_ip then
local new_hostname = new_ip:string():gsub("%.", "-")
uci:set("freifunk", "wizard", "hostname", new_hostname)
uci:save("freifunk")
end
end
if has_ipv6 then
local meship6 = f:field(Value, "meship6_" .. device, device:upper() .. " Mesh IPv6 Adresse einrichten", "Ihre Mesh IP Adresse wird automatisch berechnet")
@ -219,7 +200,7 @@ uci:foreach("wireless", "wifi-device",
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
client.rmempty = true
function client.cfgvalue(self, section)
return uci:get("freifunk", "wizard", "client_" .. device)
end
@ -320,93 +301,6 @@ uci:foreach("network", "interface",
end
end)
local syslat = uci:get("freifunk", "wizard", "latitude") or 52
local syslon = uci:get("freifunk", "wizard", "longitude") or 10
uci:foreach("system", "system", function(s)
if s.latitude then
syslat = s.latitude
end
if s.longitude then
syslon = s.longitude
end
end)
uci:foreach("olsrd", "LoadPlugin", function(s)
if s.library == "olsrd_nameservice.so.0.3" then
if s.lat then
syslat = s.lat
end
if s.lon then
syslon = s.lon
end
end
end)
lat = f:field(Value, "lat", "geographischer Breitengrad", "Setzen Sie den Breitengrad (Latitude) Ihres Geräts.")
lat:depends("netconfig", "1")
function lat.cfgvalue(self, section)
return syslat
end
function lat.write(self, section, value)
uci:set("freifunk", "wizard", "latitude", value)
uci:save("freifunk")
end
lon = f:field(Value, "lon", "geograpischer Längengrad", "Setzen Sie den Längengrad (Longitude) Ihres Geräts.")
lon:depends("netconfig", "1")
function lon.cfgvalue(self, section)
return syslon
end
function lon.write(self, section, value)
uci:set("freifunk", "wizard", "longitude", value)
uci:save("freifunk")
end
--[[
*Opens an OpenStreetMap iframe or popup
*Makes use of resources/OSMLatLon.htm and htdocs/resources/osm.js
(is that the right place for files like these?)
]]--
local class = util.class
OpenStreetMapLonLat = class(AbstractValue)
function OpenStreetMapLonLat.__init__(self, ...)
AbstractValue.__init__(self, ...)
self.template = "cbi/osmll_value"
self.latfield = nil
self.lonfield = nil
self.centerlat = ""
self.centerlon = ""
self.zoom = "0"
self.width = "100%" --popups will ignore the %-symbol, "100%" is interpreted as "100"
self.height = "600"
self.popup = false
self.displaytext="OpenStreetMap" --text on button, that loads and displays the OSMap
self.hidetext="X" -- text on button, that hides OSMap
end
osm = f:field(OpenStreetMapLonLat, "latlon", "Geokoordinaten mit OpenStreetMap ermitteln:", "Klicken Sie auf Ihren Standort in der Karte. Diese Karte funktioniert nur, wenn das Gerät bereits eine Verbindung zum Internet hat.")
osm:depends("netconfig", "1")
osm.latfield = "lat"
osm.lonfield = "lon"
osm.centerlat = syslat
osm.centerlon = syslon
osm.width = "100%"
osm.height = "600"
osm.popup = false
syslatlengh = string.len(syslat)
if syslatlengh > 7 then
osm.zoom = "15"
elseif syslatlengh > 5 then
osm.zoom = "12"
else
osm.zoom = "6"
end
osm.displaytext="OpenStreetMap anzeigen"
osm.hidetext="OpenStreetMap verbergen"
share = f:field(Flag, "sharenet", "Eigenen Internetzugang freigeben", "Geben Sie Ihren Internetzugang im Freifunknetz frei.")
share.rmempty = false
share:depends("netconfig", "1")
@ -420,8 +314,8 @@ end
wanproto = f:field(ListValue, "wanproto", "Protokoll des Internetzugangs", "Geben Sie das Protokol an ueber das eine Internet verbindung hergestellt werden kann.")
wanproto:depends("sharenet", "1")
wanproto:value("static", translate("manual", "manual"))
wanproto:value("dhcp", translate("automatic", "automatic"))
wanproto:value("static", translate("static", "static"))
wanproto:value("dhcp", translate("dhcp", "dhcp"))
if has_pppoe then wanproto:value("pppoe", "PPPoE") end
if has_pptp then wanproto:value("pptp", "PPTP") end
function wanproto.cfgvalue(self, section)
@ -587,7 +481,6 @@ function f.handle(self, state, data)
uci:commit("luci_splash")
uci:commit("firewall")
uci:commit("system")
uci:commit("uhttpd")
uci:commit("olsrd")
uci:commit("manager")
if has_autoipv6 then
@ -603,7 +496,7 @@ function f.handle(self, state, data)
uci:commit("radvd")
end
sys.exec("for s in network dnsmasq luci_splash firewall uhttpd olsrd radvd l2gvpn; do [ -x /etc/init.d/$s ] && /etc/init.d/$s restart;done > /dev/null &")
sys.exec("for s in network dnsmasq luci_splash firewall olsrd radvd l2gvpn; do [ -x /etc/init.d/$s ] && /etc/init.d/$s restart;done > /dev/null &" )
luci.http.redirect(luci.dispatcher.build_url(luci.dispatcher.context.path[1], "freifunk", "ffwizard"))
end
return false
@ -630,8 +523,8 @@ function main.write(self, section, value)
return
end
-- Collect IP-Address
local community = net:formvalue(section)
suffix = uci:get("freifunk", community, "suffix") or "olsr"
uci:set("freifunk", "wizard", "net", uci:get_first(community, "community", "mesh_network"))
uci:save("freifunk")
-- Invalidate fields
if not community then
@ -642,17 +535,14 @@ function main.write(self, section, value)
uci:set("freifunk", "wizard", "netconfig", "1")
uci:save("freifunk")
local external
external = uci:get("freifunk", community, "external") or ""
local netname = "wireless"
local network
network = ip.IPv4(uci:get("freifunk", community, "mesh_network") or "104.0.0.0/8")
network = ip.IPv4(uci:get_first(community, "community", "mesh_network") or "104.0.0.0/8")
-- Tune community settings
if community and uci:get("freifunk", community) then
uci:tset("freifunk", "community", uci:get_all("freifunk", community))
end
-- if community and uci:get("freifunk", community) then
-- uci:get_all(community)
-- end
-- Cleanup
uci:delete_all("firewall","zone", {name="freifunk"})
@ -668,14 +558,14 @@ function main.write(self, section, value)
uci:foreach("freifunk", "fw_forwarding", function(section)
uci:section("firewall", "forwarding", nil, section)
end)
uci:foreach(external, "fw_forwarding", function(section)
uci:foreach(community, "fw_forwarding", function(section)
uci:section("firewall", "forwarding", nil, section)
end)
uci:foreach("freifunk", "fw_rule", function(section)
uci:section("firewall", "rule", nil, section)
end)
uci:foreach(external, "fw_rule", function(section)
uci:foreach(community, "fw_rule", function(section)
uci:section("firewall", "rule", nil, section)
end)
end
@ -688,7 +578,7 @@ function main.write(self, section, value)
uci:delete_all("olsrd", "olsrd")
local olsrbase
olsrbase = uci:get_all("freifunk", "olsrd") or {}
util.update(olsrbase, uci:get_all(external, "olsrd") or {})
util.update(olsrbase, uci:get_all(community, "olsrd") or {})
if has_ipv6 then
olsrbase.IpVersion='6and4'
else
@ -765,12 +655,12 @@ function main.write(self, section, value)
end
-- New Config
-- Tune wifi device
local ssid = uci:get("freifunk", community, "ssid") or "olsr.freifunk.net"
local ssid = uci:get_first(community, "community", "ssid") or "olsr.freifunk.net"
local devconfig = uci:get_all("freifunk", "wifi_device")
util.update(devconfig, uci:get_all(external, "wifi_device") or {})
util.update(devconfig, uci:get_all(community, "wifi_device") or {})
local channel = luci.http.formvalue("cbid.ffwizward.1.chan_" .. device)
local hwmode = "11bg"
local bssid = uci:get_all(external, "wifi_iface", "bssid") or "02:CA:FF:EE:BA:BE"
local bssid = uci:get_all(community, "wifi_iface", "bssid") or "02:CA:FF:EE:BA:BE"
local mrate = 5500
-- set bssid, see https://kifuse02.pberg.freifunk.net/moin/channel-bssid-essid for schema
if channel and channel ~= "default" then
@ -786,23 +676,21 @@ function main.write(self, section, value)
elseif chan >= 36 and chan <= 64 then
hwmode = "11a"
mrate = ""
outdoor = 0
bssid = "00:" .. channel ..":CA:FF:EE:EE"
elseif chan >= 100 and chan <= 140 then
hwmode = "11a"
mrate = ""
outdoor = 1
bssid = "01:" .. string.sub(channel, 2) .. ":CA:FF:EE:EE"
end
devconfig.hwmode = hwmode
devconfig.outdoor = outdoor
end
devconfig.country = cc
ssid = ssid .. " - ch" .. channel
end
uci:tset("wireless", device, devconfig)
-- Create wifi iface
local ifconfig = uci:get_all("freifunk", "wifi_iface")
util.update(ifconfig, uci:get_all(external, "wifi_iface") or {})
util.update(ifconfig, uci:get_all(community, "wifi_iface") or {})
ifconfig.device = device
ifconfig.network = nif
ifconfig.ssid = ssid
@ -810,7 +698,7 @@ function main.write(self, section, value)
ifconfig.encryption="none"
-- Read Preset
local netconfig = uci:get_all("freifunk", "interface")
util.update(netconfig, uci:get_all(external, "interface") or {})
util.update(netconfig, uci:get_all(community, "interface") or {})
netconfig.proto = "static"
netconfig.ipaddr = node_ip:string()
if has_ipv6 then
@ -834,14 +722,11 @@ function main.write(self, section, value)
})
uci:save("radvd")
end
local new_hostname = node_ip:string():gsub("%.", "-")
uci:set("freifunk", "wizard", "hostname", new_hostname)
uci:save("freifunk")
tools.firewall_zone_add_interface("freifunk", nif)
uci:save("firewall")
-- Write new olsrv4 interface
local olsrifbase = uci:get_all("freifunk", "olsr_interface")
util.update(olsrifbase, uci:get_all(external, "olsr_interface") or {})
util.update(olsrifbase, uci:get_all(community, "olsr_interface") or {})
olsrifbase.interface = nif
olsrifbase.ignore = "0"
uci:section("olsrd", "Interface", nil, olsrifbase)
@ -849,12 +734,15 @@ function main.write(self, section, value)
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))
hbconf(nif)
--[[
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
@ -883,26 +771,12 @@ function main.write(self, section, value)
end
end)
else
local subnet_prefix = tonumber(uci:get("freifunk", community, "splash_prefix")) or 27
local pool_network = uci:get("freifunk", community, "splash_network") or "10.104.0.0/16"
local pool = luci.ip.IPv4(pool_network)
local ip = tostring(node_ip)
if pool and ip then
local hosts_per_subnet = 2^(32 - subnet_prefix)
local number_of_subnets = (2^pool:prefix())/hosts_per_subnet
local seed1, seed2 = ip:match("(%d+)%.(%d+)$")
if seed1 and seed2 then
math.randomseed(seed1 * seed2)
end
local subnet = pool:add(hosts_per_subnet * math.random(number_of_subnets))
dhcp_ip = subnet:network(subnet_prefix):add(1):string()
dhcp_mask = subnet:mask(subnet_prefix):string()
end
gen_dhcp_range(netconfig.ipaddr)
end
if dhcp_ip and dhcp_mask then
-- Create alias
local aliasbase = uci:get_all("freifunk", "alias")
util.update(aliasbase, uci:get_all(external, "alias") or {})
util.update(aliasbase, uci:get_all(community, "alias") or {})
aliasbase.ipaddr = dhcp_ip
aliasbase.netmask = dhcp_mask
aliasbase.proto = "static"
@ -943,7 +817,7 @@ function main.write(self, section, value)
end
-- Create dhcp
local dhcpbase = uci:get_all("freifunk", "dhcp")
util.update(dhcpbase, uci:get_all(external, "dhcp") or {})
util.update(dhcpbase, uci:get_all(community, "dhcp") or {})
dhcpbase.interface = nif .. "dhcp"
dhcpbase.force = 1
uci:section("dhcp", "dhcp", nif .. "dhcp", dhcpbase)
@ -1011,9 +885,9 @@ function main.write(self, section, value)
end
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_ip = luci.http.formvalue("cbid.ffwizward.1.meship_" .. device) --and ip.IPv4(luci.http.formvalue("cbid.ffwizward.1.meship_" .. 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))
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
@ -1039,7 +913,7 @@ function main.write(self, section, value)
end
-- New Config
local netconfig = uci:get_all("freifunk", "interface")
util.update(netconfig, uci:get_all(external, "interface") or {})
util.update(netconfig, uci:get_all(community, "interface") or {})
netconfig.proto = "static"
netconfig.ipaddr = node_ip:string()
if has_ipv6 then
@ -1064,14 +938,11 @@ function main.write(self, section, value)
})
uci:save("radvd")
end
local new_hostname = node_ip:string():gsub("%.", "-")
uci:set("freifunk", "wizard", "hostname", new_hostname)
uci:save("freifunk")
tools.firewall_zone_add_interface("freifunk", device)
uci:save("firewall")
-- Write new olsrv4 interface
local olsrifbase = uci:get_all("freifunk", "olsr_interface")
util.update(olsrifbase, uci:get_all(external, "olsr_interface") or {})
util.update(olsrifbase, uci:get_all(community, "olsr_interface") or {})
olsrifbase.interface = device
olsrifbase.ignore = "0"
uci:section("olsrd", "Interface", nil, olsrifbase)
@ -1080,12 +951,17 @@ function main.write(self, section, value)
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))
hbconf(device)
--[[
if has_hb then
hbconf(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")
end
]]
if dhcpmeshnet then
if not dhcpmeshnet:minhost() or not dhcpmeshnet:mask() then
dhcpmesh.tag_missing[section] = true
@ -1108,26 +984,12 @@ function main.write(self, section, value)
end
end)
else
local subnet_prefix = tonumber(uci:get("freifunk", community, "splash_prefix")) or 27
local pool_network = uci:get("freifunk", community, "splash_network") or "10.104.0.0/16"
local pool = luci.ip.IPv4(pool_network)
local ip = tostring(node_ip)
if pool and ip then
local hosts_per_subnet = 2^(32 - subnet_prefix)
local number_of_subnets = (2^pool:prefix())/hosts_per_subnet
local seed1, seed2 = ip:match("(%d+)%.(%d+)$")
if seed1 and seed2 then
math.randomseed(seed1 * seed2)
end
local subnet = pool:add(hosts_per_subnet * math.random(number_of_subnets))
dhcp_ip = subnet:network(subnet_prefix):add(1):string()
dhcp_mask = subnet:mask(subnet_prefix):string()
end
gen_dhcp_range(netconfig.ipaddr)
end
if dhcp_ip and dhcp_mask then
-- Create alias
local aliasbase = uci:get_all("freifunk", "alias")
util.update(aliasbase, uci:get_all(external, "alias") or {})
util.update(aliasbase, uci:get_all(community, "alias") or {})
aliasbase.interface = device
aliasbase.ipaddr = dhcp_ip
aliasbase.netmask = dhcp_mask
@ -1135,7 +997,7 @@ function main.write(self, section, value)
uci:section("network", "alias", device .. "dhcp", aliasbase)
-- Create dhcp
local dhcpbase = uci:get_all("freifunk", "dhcp")
util.update(dhcpbase, uci:get_all(external, "dhcp") or {})
util.update(dhcpbase, uci:get_all(community, "dhcp") or {})
dhcpbase.interface = device .. "dhcp"
dhcpbase.force = 1
uci:section("dhcp", "dhcp", device .. "dhcp", dhcpbase)
@ -1226,9 +1088,6 @@ function main.write(self, section, value)
uci:save("firewall")
uci:save("dhcp")
local new_hostname = uci:get("freifunk", "wizard", "hostname")
local old_hostname = sys.hostname()
if has_hb then
local dhcphb = hb:formvalue(section)
if dhcphb then
@ -1243,7 +1102,6 @@ function main.write(self, section, value)
uci:save("manager")
end
local custom_hostname = hostname:formvalue(section)
uci:foreach("system", "system",
function(s)
-- Make crond silent
@ -1251,18 +1109,6 @@ function main.write(self, section, value)
-- Make set timzone and zonename
uci:set("system", s['.name'], "zonename", "Europe/Berlin")
uci:set("system", s['.name'], "timezone", 'CET-1CEST,M3.5.0,M10.5.0/3')
-- Set hostname
if custom_hostname then
uci:set("system", s['.name'], "hostname", custom_hostname)
sys.hostname(custom_hostname)
else
if new_hostname then
if old_hostname == "OpenWrt" or old_hostname:match("^%d+-%d+-%d+-%d+$") then
uci:set("system", s['.name'], "hostname", new_hostname)
sys.hostname(new_hostname)
end
end
end
end)
-- Create time rdate_servers
@ -1275,29 +1121,6 @@ function main.write(self, section, value)
uci:section("system", "rdate", nil, rdate)
uci:save("system")
-- Create http splash port 8082
uci:set_list("uhttpd","main","listen_http",{"80"})
uci:set_list("uhttpd","main","listen_https",{"443"})
uci:save("uhttpd")
-- Read geos
local latval = tonumber(lat:formvalue(section))
local lonval = tonumber(lon:formvalue(section))
-- Save latlon to system too
if latval and lonval then
uci:foreach("system", "system", function(s)
uci:set("system", s[".name"], "latlon",string.format("%.15f %.15f", latval, lonval))
uci:set("system", s[".name"], "latitude",string.format("%.15f", latval))
uci:set("system", s[".name"], "longitude",string.format("%.15f", lonval))
end)
else
uci:foreach("system", "system", function(s)
uci:delete("system", s[".name"], "latlon")
uci:delete("system", s[".name"], "latitude")
uci:delete("system", s[".name"], "longitude")
end)
end
-- Delete old watchdog settings
uci:delete_all("olsrd", "LoadPlugin", {library="olsrd_watchdog.so.0.1"})
-- Write new watchdog settings
@ -1315,8 +1138,8 @@ function main.write(self, section, value)
suffix = "." .. suffix ,
hosts_file = "/var/etc/hosts.olsr",
latlon_file = "/var/run/latlon.js",
lat = latval and string.format("%.15f", latval) or "",
lon = lonval and string.format("%.15f", lonval) or "",
lat = lat and string.format("%.15f", lat) or "",
lon = lon and string.format("%.15f", lon) or "",
services_file = "/var/etc/services.olsr"
})
@ -1416,11 +1239,11 @@ function main.write(self, section, value)
uci:delete_all("l2gvpn", "supernode")
-- Write olsr tunnel interface options
local olsr_gvpnifbase = uci:get_all("freifunk", "olsr_gvpninterface")
util.update(olsr_gvpnifbase, uci:get_all(external, "olsr_gvpninterface") or {})
util.update(olsr_gvpnifbase, uci:get_all(community, "olsr_gvpninterface") or {})
uci:section("olsrd", "Interface", nil, olsr_gvpnifbase)
local vpnip = gvpnip:formvalue(section)
local gvpnif = uci:get_all("freifunk", "gvpn_node")
util.update(gvpnif, uci:get_all(external, "gvpn_node") or {})
util.update(gvpnif, uci:get_all(community, "gvpn_node") or {})
if gvpnif and gvpnif.tundev and vpnip then
uci:section("network", "interface", gvpnif.tundev, {
ifname =gvpnif.tundev ,

View file

@ -0,0 +1,27 @@
<%+header%>
<%
local uci = require "luci.model.uci".cursor()
local basicsurl = luci.dispatcher.build_url(luci.dispatcher.context.path[1], "freifunk", "basics")
local hostname = uci:get_first ("system", "system", "hostname")
local latitude = uci:get_first ("system", "system", "latitude")
local longitude = uci:get_first ("system", "system", "longitude")
local location = uci:get_first ("system", "system", "location")
%>
<h2><%:Error%></h2>
<%:You can not use the wizard because some necessary values are not set.%>
<p/>
<%
local co = uci:get("freifunk", "community", "name")
if not (co and hostname and latitude and longitude and location) then
%>
<%:Basic settings are missing. Please go to this page and fill all required fields: %>
<a href='<%=basicsurl%>'><%:Basic settings%></a>
<p/>
<% end %>
<%+footer%>

View file

@ -13,9 +13,6 @@ set_default_config()
set freifunk.wifi_device.rxantenna=1
set freifunk.wifi_device.disabled=0
set freifunk.wifi_device.txpower=""
set freifunk.wifi_device.country=276
set freifunk.wifi_device.regdomain="0x37"
set freifunk.wifi_device.outdoor="1"
set freifunk.wifi_device.hwmode=11g
set freifunk.wifi_device.distance=1000
set freifunk.wifi_iface=defaults
@ -33,7 +30,6 @@ set_default_config()
set freifunk.wifi_device.diversity=""
set freifunk.wifi_device.disabled=0
set freifunk.wifi_device.txpower=""
set freifunk.wifi_device.country=DE
set freifunk.wifi_device.distance=1000
set freifunk.wifi_device.htmode='HT40-'
set freifunk.wifi_device.hwmode=11ng
@ -50,7 +46,6 @@ set_default_config()
set freifunk.wifi_device.diversity=""
set freifunk.wifi_device.disabled=0
set freifunk.wifi_device.txpower=""
set freifunk.wifi_device.country=DE
set freifunk.wifi_device.txantenna=0
set freifunk.wifi_device.rxantenna=0
set freifunk.wifi_device.hwmode=11g

View file

@ -223,7 +223,7 @@ define Package/luci-mod-freifunk-community
TITLE:=Freifunk Community Meta-Package
DEPENDS+= \
+luci-lib-web +luci-app-splash \
+luci-app-ffwizard-leipzig \
+luci-app-ffwizard \
+luci-i18n-german \
+PACKAGE_luci-mod-freifunk-community:olsrd +PACKAGE_luci-mod-freifunk-community:olsrd-mod-dyn-gw-plain \
+PACKAGE_luci-mod-freifunk-community:olsrd-mod-txtinfo +PACKAGE_luci-mod-freifunk-community:olsrd-mod-nameservice \
@ -322,10 +322,8 @@ define Package/luci-app-diag-devinfo/conffiles
endef
$(eval $(call application,ffwizard-leipzig,Freifunk Leipzig configuration wizard))
$(eval $(call application,ffwizard,Freifunk configuration wizard,\
+luci-mod-freifunk))
+PACKAGE_luci-mod-freifunk))
$(eval $(call application,siitwizard,SIIT IPv4-over-IPv6 configuration wizard,\
+PACKAGE_luci-app-siitwizard:kmod-siit))

View file

@ -17,6 +17,7 @@ function index()
local i18n = luci.i18n.translate
local uci = require "luci.model.uci".cursor()
-- Frontend
local page = node()
page.lock = true
page.target = alias("freifunk")
@ -41,6 +42,7 @@ function index()
local page = node("freifunk", "index", "contact")
page.target = template("freifunk/contact")
page.title = "Kontakt"
page.order = 10
local page = node("freifunk", "status")
page.target = template("freifunk/public_status")
@ -60,22 +62,39 @@ function index()
assign({"freifunk", "graph"}, {"admin", "statistics", "graph"}, i18n("Statistics"), 40)
end
assign({"mini", "freifunk"}, {"admin", "freifunk"}, "Freifunk", 15)
entry({"admin", "freifunk"}, alias("admin", "freifunk", "index"), "Freifunk", 15)
local page = node("admin", "freifunk", "index")
page.target = cbi("freifunk/freifunk")
-- backend
assign({"mini", "freifunk"}, {"admin", "freifunk"}, "Freifunk", 5)
entry({"admin", "freifunk"}, alias("admin", "freifunk", "index"), "Freifunk", 5)
local page = node("admin", "freifunk")
page.target = template("freifunk/adminindex")
page.title = "Freifunk"
page.order = 30
page.order = 5
local page = node("admin", "freifunk", "basics")
page.target = cbi("freifunk/basics")
page.title = "Grundeinstellungen"
page.order = 5
local page = node("admin", "freifunk", "basics", "profile")
page.target = cbi("freifunk/profile")
page.title = "Profile"
page.order = 10
local page = node("admin", "freifunk", "basics", "profile_expert")
page.target = cbi("freifunk/profile_expert")
page.title = "Profile (Expert)"
page.order = 20
local page = node("admin", "freifunk", "Index-Page")
page.target = cbi("freifunk/user_index")
page.title = "Index-Page"
page.order = 35
page.order = 50
local page = node("admin", "freifunk", "contact")
page.target = cbi("freifunk/contact")
page.title = "Kontakt"
page.order = 40
page.order = 15
entry({"freifunk", "map"}, template("freifunk-map/frame"), i18n("Karte"), 50)
entry({"freifunk", "map", "content"}, template("freifunk-map/map"), nil, 51)
@ -85,7 +104,6 @@ function index()
has_serv = true
end
end)
if has_serv then
entry({"freifunk", "services"}, template("freifunk-services/services"), i18n("Services"), 60)
end
@ -296,4 +314,3 @@ function public_status_json()
luci.http.write_json(rv)
return
end

View file

@ -0,0 +1,115 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id: freifunk.lua 3291 2008-09-14 21:59:14Z Cyrus $
]]--
local fs = require "luci.fs"
local util = require "luci.util"
local uci = require "luci.model.uci".cursor()
local profiles = "/etc/config/profile_"
m = Map("freifunk", "Freifunk")
c = m:section(NamedSection, "community", "public", "Gemeinschaft", [[Dies sind die Grundeinstellungen
für die lokale Freifunkgemeinschaft. Diese Werte wirken sich NICHT auf die Konfiguration
des Routers aus, sondern definieren nur die Vorgaben für den Freifunkassistenten.]])
community = c:option(ListValue, "name", "Gemeinschaft")
community.rmempty = false
local list = { }
local list = fs.glob(profiles .. "*")
for k,v in ipairs(list) do
local name = uci:get_first(v, "community", "name") or "?"
local n = string.gsub(v, profiles, "")
community:value(n, name)
end
n = Map("system", translate("Basic system settings"))
b = n:section(TypedSection, "system", "Basic system settings")
b.anonymous = true
hn = b:option(Value, "hostname", "hostname")
hn.rmempty = false
function hn.validate(self, value)
if value == nil then
return
elseif (#value > 24) or string.match(value, "[^%w%.%-]") or string.match(value, "^[%-%.]") or string.match(value, "[%-%.]$") then
return nil, translate("Hostname may contain up to 24 alphanumeric characters. Minus and period are also allowed, but not in the beginning or the end of the hostname.")
else
return value
end
end
loc = b:option(Value, "location", "Location")
loc.rmempty = false
lat = b:option(Value, "latitude", "latitude")
lat.rmempty = false
lon = b:option(Value, "longitude", "longitude")
lon.rmempty = false
--[[
Opens an OpenStreetMap iframe or popup
Makes use of resources/OSMLatLon.htm and htdocs/resources/osm.js
(is that the right place for files like these?)
]]--
local class = util.class
local co = "profile_augsburg"
local syslat = uci:get_first(co, "community", "latitude")
local syslon = uci:get_first(co, "community", "longitude")
OpenStreetMapLonLat = class(AbstractValue)
function OpenStreetMapLonLat.__init__(self, ...)
AbstractValue.__init__(self, ...)
self.template = "cbi/osmll_value"
self.latfield = nil
self.lonfield = nil
self.centerlat = ""
self.centerlon = ""
self.zoom = "0"
self.width = "100%" --popups will ignore the %-symbol, "100%" is interpreted as "100"
self.height = "600"
self.popup = false
self.displaytext="OpenStreetMap" --text on button, that loads and displays the OSMap
self.hidetext="X" -- text on button, that hides OSMap
end
f = SimpleForm("ffwizward", "OpenStreetMap", "Hier kann man die Geokoordinaten des Knotens herausfinden.")
osm = f:field(OpenStreetMapLonLat, "latlon", "Geokoordinaten mit OpenStreetMap ermitteln:", "Klicken Sie auf Ihren Standort in der Karte. Diese Karte funktioniert nur, wenn das Gerät bereits eine Verbindung zum Internet hat.")
osm.latfield = "lat"
osm.lonfield = "lon"
osm.centerlat = syslat
osm.centerlon = syslon
osm.width = "100%"
osm.height = "600"
osm.popup = false
syslatlengh = string.len(syslat)
if syslatlengh > 7 then
osm.zoom = "15"
elseif syslatlengh > 5 then
osm.zoom = "12"
else
osm.zoom = "6"
end
osm.displaytext="OpenStreetMap anzeigen"
osm.hidetext="OpenStreetMap verbergen"
return m, n

View file

@ -18,17 +18,17 @@ m = Map("freifunk", translate("Contact"), translate("Please fill in your contact
c = m:section(NamedSection, "contact", "public", "")
c:option(Value, "nickname", translate("Nickname"))
c:option(Value, "name", translate("Realname"))
c:option(Value, "mail", translate("E-Mail"), translate("You really should provide your address here!"))
local nick = c:option(Value, "nickname", translate("Nickname"))
nick.rmempty = false
name = c:option(Value, "name", translate("Realname"))
name.rmempty = false
mail = c:option(Value, "mail", translate("E-Mail"))
mail.rmempty = false
c:option(Value, "phone", translate("Phone"))
c:option(Value, "location", translate("Location"))
c:option(Value, "note", translate("Notice"))
m2 = Map("system", translate("Coordinates"))
s = m2:section(TypedSection, "system", "")
s:option(Value, "latitude", translate("Latitude")).rmempty = true
s:option(Value, "longitude", translate("Longitude")).rmempty = true
return m, m2
return m

View file

@ -1,24 +0,0 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id$
]]--
m = Map("freifunk", "Freifunk")
c = m:section(NamedSection, "community", "public", "Gemeinschaft", [[Dies sind die Grundeinstellungen
für die lokale Freifunkgemeinschaft. Diese Werte wirken sich NICHT auf die Konfiguration
des Routers aus, sondern definieren nur die Vorgaben für den Freifunkassistenten.]])
c:option(Value, "name", "Gemeinschaft")
c:option(Value, "homepage", "Webseite")
c:option(Value, "ssid", "ESSID")
c:option(Value, "prefix", "Netzprefix")
return m

View file

@ -0,0 +1,55 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2011 Manuel Munz <freifunk at somakoma dot de>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
httc://www.apache.org/licenses/LICENSE-2.0
]]--
local uci = require "luci.model.uci".cursor()
local community = "profile_" .. uci:get("freifunk", "community", "name")
--local community = "profile_augsburg"
m = Map(community, translate("Community settings"), translate("These are the settings of your local community"))
c = m:section(NamedSection, "profile", "community", "foobar")
name = c:option(Value, "name", "Name")
name.rmempty = false
homepage = c:option(Value, "homepage", "Webseite")
cc = c:option(Value, "country", "Countrycode")
function cc.cfgvalue(self, section)
return uci:get(community, "wifi_device", "country")
end
function cc.write(self, sec, value)
if value then
uci:set(community, "wifi_device", "country", value)
uci:save(community)
end
end
ssid = c:option(Value, "ssid", "ESSID")
ssid.rmempty = false
prefix = c:option(Value, "mesh_network", "Netzprefix")
prefix.rmempty = false
splash_net = c:option(Value, "splash_network", "Netzwerk für Client-DHCP-Adressen")
splash_net.rmempty = false
splash_prefix = c:option(Value, "splash_prefix", "Netzgröße für Clientnetze")
splash_prefix.rmempty = false
lat = c:option(Value, "latitude", "Latitude")
lat.rmempty = false
lon = c:option(Value, "longitude", "longitude")
lon.rmempty = false
return m

View file

@ -0,0 +1,36 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2011 Manuel Munz <freifunk at somakoma dot de>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
httc://www.apache.org/licenses/LICENSE-2.0
]]--
local fs = require "nixio.fs"
local uci = require "luci.model.uci".cursor()
local community = "/etc/config/profile_" .. uci:get("freifunk", "community", "name")
f = SimpleForm("community", translate("Community profile"), translate("This is the complete content of the selected community profile."))
t = f:field(TextValue, "cop")
t.rmempty = true
t.rows = 30
function t.cfgvalue()
return fs.readfile(community) or ""
end
function f.handle(self, state, data)
if state == FORM_VALID then
if data.cop then
fs.writefile(cop, data.rcs:gsub("\r\n", "\n"))
end
end
return true
end
return f

View file

@ -0,0 +1,33 @@
<%+header%>
<%
local uci = require "luci.model.uci".cursor()
local contact = uci:get_all("freifunk", "contact")
local contacturl = luci.dispatcher.build_url(luci.dispatcher.context.path[1], "freifunk", "contact")
local hostname = uci:get_first ("system", "system", "hostname")
local latitude = uci:get_first ("system", "system", "latitude")
local longitude = uci:get_first ("system", "system", "longitude")
local location = uci:get_first ("system", "system", "location")
local basicsurl = luci.dispatcher.build_url(luci.dispatcher.context.path[1], "freifunk", "basics")
%>
<h2><%:Freifunk Overview%></h2>
<%:These pages will assist you in setting up your router for Freifunk or similar wireless community networks.%>
<p />
<% if not (hostname and latitude and longitude and location) then%>
<div class="error">
<%:Basic settings are missing. Please go to this page and fill all required fields: %>
<a href='<%=basicsurl%>'><%:Basic settings%></a>
</div>
<%end%>
<p />
<% if not (contact.nickname and contact.name and contact.mail) then%>
<div class="error">
<%:Contact information missing. Please go to this page and fill all required fields: %>
<a href='<%=contacturl%>'><%:Contact%></a>
</div>
<%end%>
<%+footer%>

View file

@ -13,15 +13,23 @@ $Id$
-%>
<%+header%>
<% local contact = luci.model.uci.cursor():get_all("freifunk", "contact") %>
<%
local uci = require "luci.model.uci".cursor()
local contact = uci:get_all("freifunk", "contact")
local location = uci:get_first("system", "system", "location")
local lon = uci:get_first("system", "system", "longitude")
local lat = uci:get_first("system", "system", "latitude")
%>
<h2><a id="content" name="content"><%:Contact%></a></h2>
<table cellspacing="0" cellpadding="6">
<tr><th><%:Nickname%>:</th><td><%=contact.nickname%></td></tr>
<tr><th><%:Realname%>:</th><td><%=contact.name%></td></tr>
<tr><th><%:E-Mail%>:</th><td><%=contact.mail%></td></tr>
<tr><th><%:Phone%>:</th><td><%=contact.phone%></td></tr>
<tr><th><%:Location%>:</th><td><%=contact.location%></td></tr>
<tr><th><%:Coordinates%>:</th><td><%=contact.geo%></td></tr>
<tr><th><%:Location%>:</th><td><%=location%></td></tr>
<tr><th><%:Coordinates%>:</th><td><%=lat%> <%=lon%></td></tr>
<tr><th><%:Notice%>:</th><td><%=contact.note%></td></tr>
</table>
<%+footer%>

View file

@ -14,7 +14,16 @@ $Id$
-%>
<%+header%>
<%
local ff = luci.model.uci.cursor():get_all("freifunk")
local uci = require "luci.model.uci".cursor()
local ff = uci:get_all("freifunk")
if not ff.community.name then
ff.community.name = ""
end
local co = "profile_" .. ff.community.name
local community = uci:get_first(co, "community", "name") or "Freifunk"
local url = uci:get_first(co, "community", "homepage") or "http://www.freifunk.net"
require("luci.fs")
local usertext = luci.fs.readfile("/www/luci-static/index_user.html")
@ -23,7 +32,7 @@ if (ff.community.DefaultText or "") ~= "disabled" then
defaulttext = '<h2><a id="content" name="content">'..
(translate("Hello and welcome in the network of"))..
' '..
(ff.community.name or "Freifunk Deutschland")..
(community or "Freifunk Deutschland")..
'!</a></h2><p>'..
translate("We are an initiative to establish a free, independent and open wireless mesh network.")..
'<br />'..
@ -31,20 +40,16 @@ if (ff.community.DefaultText or "") ~= "disabled" then
' '..
luci.sys.hostname()..
'. '..
translate("It is operated by")..
translate("It is operated by ")..
'<a href="'..
luci.dispatcher.build_url("freifunk", "index", "contact")..
'"> '..
(ff.contact.nickname or "Anonymous")..
'">'..
(ff.contact.nickname or translate("Please set your contact information"))..
'</a>.</p><p>'..
translate("You can find further information about the global Freifunk initiative at")..
' <a href="http://freifunk.net">Freifunk.net</a>.<br />'..
translate("If you are interested in our project then contact the local community")..
' <a href="'..
(ff.community.homepage or "http//freifunk.net")..
'">'..
(ff.community.name or "Freifunk")..
'</a>.</p><p><strong>'..
' <a href="'..url..'">'..community..'</a>.</p><p><strong>'..
translate("Notice")..
'</strong>: '..
translate("Internet access depends on technical and organisational conditions and may or may not work for you.")..

View file

@ -88,275 +88,3 @@ config 'defaults' 'time'
config 'defaults' 'upgrade'
option 'repository' 'http://dev.luci.freifunk-halle.net/freifunk-snapshots'
option 'rssfeed' 'http://firmware.leipzig.freifunk.net/kamikaze/.rss.xml'
config 'community' 'leipzig'
option 'name' 'Freifunk Leipzig'
option 'homepage' 'http://leipzig.freifunk.net'
option 'ssid' 'leipzig.freifunk.net'
option 'mesh_network' '104.61.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.33348'
option 'longitude' '12.40297'
config 'community' 'halle'
option 'name' 'Freifunk Halle'
option 'homepage' 'http://halle.freifunk.net'
option 'ssid' 'halle.freifunk.net'
option 'mesh_network' '104.62.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.47911'
option 'longitude' '11.96901'
config 'community' 'l59'
option 'name' 'Freifunk L59'
option 'homepage' 'http://freifunk.net'
option 'ssid' 'start.freifunk.net'
option 'mesh_network' '104.59.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '52.26337'
option 'longitude' '10.52103'
config 'community' 'berlin'
option 'name' 'Freifunk Berlin'
option 'homepage' 'http://berlin.freifunk.net'
option 'ssid' 'olsr.freifunk.net'
option 'mesh_network' '104.0.0.0/8'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '52.52075'
option 'longitude' '13.40948'
option 'external' 'freifunk_berlin'
config 'community' 'potsdam'
option 'name' 'Freifunk Potsdam'
option 'homepage' 'http://potsdam.freifunk.net'
option 'ssid' 'www.freifunk-potsdam.de'
option 'mesh_network' '10.22.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '52.39349'
option 'longitude' '13.06489'
option 'external' 'freifunk_potsdam'
config 'community' 'hamburg'
option 'name' 'Freifunk Hamburg'
option 'homepage' 'http://hamburg.piratenpartei.de'
option 'ssid' 'hamburg.freifunk.net'
option 'mesh_network' '10.112.0.0/12'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '53.56262'
option 'longitude' '10.01069'
option 'external' 'freifunk_hamburg'
config 'community' 'hannover'
option 'name' 'Freifunk Hannover'
option 'homepage' 'http://hannover.freifunk.net'
option 'ssid' 'hannover.freifunk.net'
option 'mesh_network' '10.2.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '52.38427'
option 'longitude' '9.74359'
option 'external' 'freifunk_hannover'
config 'community' 'augsburg'
option 'name' 'Freifunk Augsburg'
option 'homepage' 'http://augsburg.freifunk.net'
option 'ssid' 'augsburg.freifunk.net'
option 'mesh_network' '10.11.0.0/18'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '48.37071'
option 'longitude' '10.89475'
option 'suffix' 'ffa'
option 'external' 'freifunk_augsburg'
config 'community' 'jena'
option 'name' 'Freifunk Jena'
option 'homepage' 'http://www.freifunk-jena.de'
option 'ssid' 'www.freifunk-jena.de'
option 'mesh_network' '10.127.0.0/20'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '29'
option 'latitude' '50.92779'
option 'longitude' '11.58431'
option 'external' 'freifunk_jena'
config 'community' 'mainz'
option 'name' 'Freifunk Mainz'
option 'homepage' 'http://mainz.freifunk.net'
option 'ssid' 'mainz.freifunk.net'
option 'mesh_network' '10.37.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '49.99635'
option 'longitude' '8.27417'
option 'external' 'freifunk_mainz'
config 'community' 'seefeld'
option 'name' 'Freifunk Seefeld'
option 'homepage' 'http://wiki.freifunk.net/Seefeld.freifunk.net'
option 'ssid' 'seefeld.freifunk.net'
option 'mesh_network' '10.111.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '48.03485'
option 'longitude' '11.21279'
option 'external' 'freifunk_seefeld'
config 'community' 'duesseldorf'
option 'name' 'Freifunk Duesseldorf'
option 'homepage' 'http://wiki.piratenpartei.de/D%C3%BCsseldorf/Freifunk'
option 'ssid' 'duesseldorf.freifunk.net'
option 'mesh_network' '10.40.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.22347'
option 'longitude' '6.78449'
option 'external' 'freifunk_duesseldorf'
config 'community' 'oldenburg'
option 'name' 'Freifunk Oldenburg'
option 'homepage' 'http://oldenburg.freifunk.net'
option 'ssid' 'oldenburg.freifunk.net'
option 'mesh_network' '10.18.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '53.14083'
option 'longitude' '8.21314'
option 'external' 'freifunk_oldenburg'
config 'community' 'kiberpipa'
option 'name' 'Kiberpipa.net'
option 'homepage' 'http://www.kiberpipa.net'
option 'ssid' 'open.kiberpipa.net'
option 'mesh_network' '10.14.0.0/16'
option 'splash_network' '10.14.128.0/17'
option 'splash_prefix' '27'
option 'latitude' '46.05063'
option 'longitude' '14.50402'
option 'external' 'freifunk_kiberpipa'
config 'community' 'wlanljubljana'
option 'name' 'wlan ljubljana'
option 'homepage' 'http://wlan-lj.net'
option 'ssid' 'open.wlan-lj.net'
option 'mesh_network' '10.254.0.0/16'
option 'splash_network' '10.254.120.0/21'
option 'splash_prefix' '27'
option 'latitude' '46.05063'
option 'longitude' '14.50402'
option 'external' 'freifunk_wlanljubljana'
config 'community' 'heppenheim'
option 'name' 'Freifunk Heppenheim'
option 'homepage' 'http://heppenheim.freifunk.net'
option 'ssid' 'heppenheim.freifunk.net'
option 'mesh_network' '10.48.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.151786'
option 'longitude' '10.415039'
config 'community' 'bensheim'
option 'name' 'Freifunk Bensheim'
option 'homepage' 'http://bensheim.freifunk.net'
option 'ssid' 'bensheim.freifunk.net'
option 'mesh_network' '10.49.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '49.63939'
option 'longitude' '8.633718'
config 'community' 'marburg'
option 'name' 'Freifunk Marburg'
option 'homepage' ' http://marburg.freifunk.de'
option 'ssid' 'marburg.freifunk.net'
option 'mesh_network' '10.128.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '29'
option 'latitude' '49.63939'
option 'longitude' '8.633718'
option 'external' 'freifunk_marburg'
config 'community' 'openwireless_bern'
option 'name' 'Openwireless Bern'
option 'homepage' 'http://bern.openwireless.ch/'
option 'ssid' 'www.openwireless.ch'
option 'mesh_network' '10.247.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '50.814788'
option 'longitude' '8.769239'
option 'external' 'openwireless_bern'
config 'community' 'piraten_BergischesLand'
option 'name' 'Piratenfreifunk Bergisches Land'
option 'homepage' 'http://www.piraten-bergisches-land.de'
option 'ssid' 'PiratenfunkBL'
option 'mesh_network' '10.3.0.0/16'
option 'splash_network' '192.168.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.26849'
option 'longitude' '7.19476'
option 'external' 'freifunk_bergischesland'
config 'community' 'piraten_dresden'
option 'name' 'Piratenfreifunk Dresden'
option 'homepage' 'http://www.piraten-sachsen.de/'
option 'ssid' 'dresden.freifunk.net'
option 'mesh_network' '10.12.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.05081'
option 'longitude' '13.73420'
option 'external' 'freifunk_dresden'
config 'community' 'dresden'
option 'name' 'Freifunk Dresden'
option 'homepage' 'http://ddmesh.de/'
option 'ssid' 'dresden.freifunk.net'
option 'mesh_network' '10.12.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.05081'
option 'longitude' '13.73420'
option 'external' 'freifunk_dresden'
config 'community' 'neuss'
option 'name' 'Freifunk Neuss'
option 'homepage' 'http://neuss.freifunk.net'
option 'ssid' 'neuss.freifunk.net'
option 'mesh_network' '172.28.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.19045'
option 'longitude' '6.69471'
option 'external' 'freifunk_neuss'
config 'community' 'pberg'
option 'name' 'Freifunk Berlin Prenzlauer Berg'
option 'homepage' 'http://pberg.freifunk.net'
option 'ssid' 'olsr.freifunk.net'
option 'mesh_network' '104.0.0.0/8'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '52.5427'
option 'longitude' '13.4172'
option 'external' 'freifunk_berlin'
config 'community' 'rosbach'
option 'name' 'Freifunk Rosbach'
option 'homepage' 'freifunk-rosbach.de'
option 'ssid' 'rosbach.freifunk.net'
option 'mesh_network' '10.212.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '50.18'
option 'longitude' '8.42'
option 'external' 'freifunk_rosbach'

View file

@ -1,5 +0,0 @@
package 'freifunk_augsburg'
config 'defaults' 'interface'
option 'netmask' '255.255.192.0'

View file

@ -1,8 +0,0 @@
package 'freifunk_bergischesland'
config 'defaults' 'wifi_device'
option 'channel' '11'
config 'defaults' 'wifi_iface'
option 'bssid' '02:40:00:42:42:42'

View file

@ -1,5 +0,0 @@
package 'freifunk_berlin'
config 'defaults' 'wifi_device'
option 'channel' '10'

View file

@ -1,5 +0,0 @@
package 'freifunk_dresden'
config 'defaults' 'wifi_device'
option 'channel' '1'

View file

@ -1,11 +0,0 @@
package 'freifunk_duesseldorf'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'
config 'defaults' 'wifi_device'
option 'channel' '3'
config 'defaults' 'wifi_iface'
option 'bssid' '02:CA:FF:EE:BA:BE'

View file

@ -1,8 +0,0 @@
package 'freifunk_hamburg'
config 'defaults' 'interface'
option 'netmask' '255.240.0.0'
config 'defaults' 'wifi_device'
option 'channel' '1'

View file

@ -1,8 +0,0 @@
package 'freifunk_hannover'
config 'defaults' 'wifi_iface'
option 'bssid' 'CA:FF:EE:CA:FF:EE'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'

View file

@ -1,5 +0,0 @@
package 'freifunk_jena'
config 'defaults' 'interface'
option 'dns' '217.11.48.200 217.11.49.200 8.8.8.8'

View file

@ -1,8 +0,0 @@
package 'freifunk_kiberpipa'
config 'defaults' 'wifi_device'
option 'channel' '8'
config 'defaults' 'interface'
option 'dns' '10.14.0.1 208.67.222.220 208.67.220.222'
option 'netmask' '255.255.0.0'

View file

@ -1,11 +0,0 @@
package 'freifunk_mainz'
config 'defaults' 'wifi_iface'
option 'bssid' '02:ca:ff:ee:ba:be'
config 'defaults' 'wifi_device'
option 'channel' '1'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'

View file

@ -1,6 +0,0 @@
package 'freifunk_marburg'
config 'defaults' 'interface'
option 'dns' '8.8.8.8 212.204.49.83'
option 'netmask' '255.255.0.0'

View file

@ -1,10 +0,0 @@
package 'freifunk_neuss'
config 'defaults' 'wifi_device'
option 'channel' '11'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'
config 'defaults' 'wifi_iface'
option 'bssid' 'DE:AD:BE:EF:CA:FE'

View file

@ -1,7 +0,0 @@
package 'freifunk_oldenburg'
config 'defaults' 'wifi_device'
option 'channel' '6'
config 'defaults' 'wifi_iface'
option 'bssid' '02:CA:FF:EE:BA:BE'

View file

@ -1,8 +0,0 @@
package 'freifunk_potsdam'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'
config 'defaults' 'wifi_device'
option 'channel' '13'

View file

@ -1,11 +0,0 @@
package 'freifunk_rosbach'
config 'defaults' 'wifi_device'
option 'channel' '13'
config 'defaults' 'wifi_iface'
option 'bssid' 'D2:CA:FF:EE:BA:BE'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'

View file

@ -1,9 +0,0 @@
package 'freifunk_seefeld'
config 'defaults' 'interface'
option 'netmask' '255.255.255.0'
config 'defaults' 'wifi_device'
option 'channel' '1'
option 'bssid' '02:CA:FF:EE:BA:BB'

View file

@ -1,8 +0,0 @@
package 'freifunk_wlanljubljana'
config 'defaults' 'wifi_device'
option 'channel' '8'
config 'defaults' 'interface'
option 'dns' '10.254.0.1 10.254.0.2'
option 'netmask' '255.255.0.0'

View file

@ -1,10 +0,0 @@
package 'openwireless_bern'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'
option 'dns' '208.67.222.222 208.67.220.220'
config 'defaults' 'wifi_device'
option 'channel' '10'
option 'country' '756'

View file

@ -0,0 +1,11 @@
config 'community' 'profile'
option 'name' 'Custom'
option 'homepage' 'http://example.freifunk.net'
option 'ssid' 'example.freifunk.net'
option 'splash_network' '10.104.0.0/16'
option 'latitude' '52.000'
option 'longitude' '10.000'
option 'external' 'freifunk_custom'
option 'splash_prefix' '28'
option 'mesh_network' '1.0.0.0/16'

View file

@ -0,0 +1,14 @@
config 'community' 'profile'
option 'name' 'Freifunk Augsburg'
option 'homepage' 'http://augsburg.freifunk.net'
option 'ssid' 'augsburg.freifunk.net'
option 'mesh_network' '10.11.0.0/18'
option 'splash_network' '10.104.0.0/16'
option 'latitude' '48.37071'
option 'longitude' '10.89475'
option 'suffix' 'ffa'
option 'splash_prefix' '27'
config 'defaults' 'interface'
option 'netmask' '255.255.192.0'

View file

@ -0,0 +1,9 @@
config 'community' 'profile'
option 'name' 'Freifunk Bensheim'
option 'homepage' 'http://bensheim.freifunk.net'
option 'ssid' 'bensheim.freifunk.net'
option 'mesh_network' '10.49.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '49.63939'
option 'longitude' '8.633718'

View file

@ -0,0 +1,20 @@
config 'community' 'profile'
option 'name' 'Piratenfreifunk Bergisches Land'
option 'homepage' 'http://www.piraten-bergisches-land.de'
option 'ssid' 'PiratenfunkBL'
option 'mesh_network' '10.3.0.0/16'
option 'splash_network' '192.168.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.26849'
option 'longitude' '7.19476'
option 'external' 'freifunk_bergischesland'
config 'defaults' 'wifi_device'
option 'channel' '11'
config 'defaults' 'wifi_iface'
option 'bssid' '02:40:00:42:42:42'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'

View file

@ -0,0 +1,12 @@
config 'community' 'profile'
option 'name' 'Freifunk Berlin'
option 'homepage' 'http://berlin.freifunk.net'
option 'ssid' 'olsr.freifunk.net'
option 'mesh_network' '104.0.0.0/8'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '52.52075'
option 'longitude' '13.40948'
config 'defaults' 'wifi_device'
option 'channel' '10'

View file

@ -0,0 +1,12 @@
config 'community' 'profile'
option 'name' 'Freifunk Dresden'
option 'homepage' 'http://ddmesh.de/'
option 'ssid' 'dresden.freifunk.net'
option 'mesh_network' '10.12.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.05081'
option 'longitude' '13.73420'
config 'defaults' 'wifi_device'
option 'channel' '1'

View file

@ -0,0 +1,18 @@
config 'community' 'profile'
option 'name' 'Freifunk Duesseldorf'
option 'homepage' 'http://wiki.piratenpartei.de/D%C3%BCsseldorf/Freifunk'
option 'ssid' 'duesseldorf.freifunk.net'
option 'mesh_network' '10.40.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.22347'
option 'longitude' '6.78449'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'
config 'defaults' 'wifi_device'
option 'channel' '3'
config 'defaults' 'wifi_iface'
option 'bssid' '02:CA:FF:EE:BA:BE'

View file

@ -0,0 +1,9 @@
config 'community' 'profile'
option 'name' 'Freifunk Halle'
option 'homepage' 'http://halle.freifunk.net'
option 'ssid' 'halle.freifunk.net'
option 'mesh_network' '104.62.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.47911'
option 'longitude' '11.96901'

View file

@ -0,0 +1,15 @@
config 'community' 'profile'
option 'name' 'Freifunk Hamburg'
option 'homepage' 'http://hamburg.piratenpartei.de'
option 'ssid' 'hamburg.freifunk.net'
option 'mesh_network' '10.112.0.0/12'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '53.56262'
option 'longitude' '10.01069'
config 'defaults' 'interface'
option 'netmask' '255.240.0.0'
config 'defaults' 'wifi_device'
option 'channel' '1'

View file

@ -0,0 +1,16 @@
config 'community' 'profile'
option 'name' 'Freifunk Hannover'
option 'homepage' 'http://hannover.freifunk.net'
option 'ssid' 'hannover.freifunk.net'
option 'mesh_network' '10.2.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '52.38427'
option 'longitude' '9.74359'
config 'defaults' 'wifi_iface'
option 'bssid' 'CA:FF:EE:CA:FF:EE'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'

View file

@ -0,0 +1,9 @@
config 'community' 'profile'
option 'name' 'Freifunk Heppenheim'
option 'homepage' 'http://heppenheim.freifunk.net'
option 'ssid' 'heppenheim.freifunk.net'
option 'mesh_network' '10.48.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.151786'
option 'longitude' '10.415039'

View file

@ -0,0 +1,12 @@
config 'community' 'profile'
option 'name' 'Freifunk Jena'
option 'homepage' 'http://www.freifunk-jena.de'
option 'ssid' 'www.freifunk-jena.de'
option 'mesh_network' '10.127.0.0/20'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '29'
option 'latitude' '50.92779'
option 'longitude' '11.58431'
config 'defaults' 'interface'
option 'dns' '217.11.48.200 217.11.49.200 8.8.8.8'

View file

@ -0,0 +1,16 @@
config 'community' 'profile'
option 'name' 'Kiberpipa.net'
option 'homepage' 'http://www.kiberpipa.net'
option 'ssid' 'open.kiberpipa.net'
option 'mesh_network' '10.14.0.0/16'
option 'splash_network' '10.14.128.0/17'
option 'splash_prefix' '27'
option 'latitude' '46.05063'
option 'longitude' '14.50402'
config 'defaults' 'wifi_device'
option 'channel' '8'
config 'defaults' 'interface'
option 'dns' '10.14.0.1 208.67.222.220 208.67.220.222'
option 'netmask' '255.255.0.0'

View file

@ -0,0 +1,9 @@
config 'community' 'profile'
option 'name' 'Freifunk L59'
option 'homepage' 'http://freifunk.net'
option 'ssid' 'start.freifunk.net'
option 'mesh_network' '104.59.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '52.26337'
option 'longitude' '10.52103'

View file

@ -0,0 +1,12 @@
config 'community' 'profile'
option 'name' 'Freifunk Leipzig'
option 'homepage' 'http://leipzig.freifunk.net'
option 'ssid' 'leipzig.freifunk.net'
option 'mesh_network' '104.61.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.33348'
option 'longitude' '12.40297'

View file

@ -0,0 +1,19 @@
config 'community' 'profile'
option 'name' 'Freifunk Mainz'
option 'homepage' 'http://mainz.freifunk.net'
option 'ssid' 'mainz.freifunk.net'
option 'mesh_network' '10.37.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '49.99635'
option 'longitude' '8.27417'
config 'defaults' 'wifi_iface'
option 'bssid' '02:ca:ff:ee:ba:be'
config 'defaults' 'wifi_device'
option 'channel' '1'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'

View file

@ -0,0 +1,13 @@
config 'community' 'profile'
option 'name' 'Freifunk Marburg'
option 'homepage' ' http://marburg.freifunk.de'
option 'ssid' 'marburg.freifunk.net'
option 'mesh_network' '10.128.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '29'
option 'latitude' '49.63939'
option 'longitude' '8.633718'
config 'defaults' 'interface'
option 'dns' '8.8.8.8 212.204.49.83'
option 'netmask' '255.255.0.0'

View file

@ -0,0 +1,18 @@
config 'community' 'profile'
option 'name' 'Freifunk Neuss'
option 'homepage' 'http://neuss.freifunk.net'
option 'ssid' 'neuss.freifunk.net'
option 'mesh_network' '172.28.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.19045'
option 'longitude' '6.69471'
config 'defaults' 'wifi_device'
option 'channel' '11'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'
config 'defaults' 'wifi_iface'
option 'bssid' 'DE:AD:BE:EF:CA:FE'

View file

@ -0,0 +1,15 @@
config 'community' 'profile'
option 'name' 'Freifunk Oldenburg'
option 'homepage' 'http://oldenburg.freifunk.net'
option 'ssid' 'oldenburg.freifunk.net'
option 'mesh_network' '10.18.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '53.14083'
option 'longitude' '8.21314'
config 'defaults' 'wifi_device'
option 'channel' '6'
config 'defaults' 'wifi_iface'
option 'bssid' '02:CA:FF:EE:BA:BE'

View file

@ -0,0 +1,19 @@
config 'community' 'profile'
option 'name' 'Openwireless Bern'
option 'homepage' 'http://bern.openwireless.ch/'
option 'ssid' 'www.openwireless.ch'
option 'mesh_network' '10.247.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '50.814788'
option 'longitude' '8.769239'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'
option 'dns' '208.67.222.222 208.67.220.220'
config 'defaults' 'wifi_device'
option 'channel' '10'
option 'country' '756'

View file

@ -0,0 +1,12 @@
config 'community' 'profile'
option 'name' 'Freifunk Berlin Prenzlauer Berg'
option 'homepage' 'http://pberg.freifunk.net'
option 'ssid' 'olsr.freifunk.net'
option 'mesh_network' '104.0.0.0/8'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '52.5427'
option 'longitude' '13.4172'
config 'defaults' 'wifi_device'
option 'channel' '10'

View file

@ -0,0 +1,12 @@
config 'community' 'profile'
option 'name' 'Piratenfreifunk Dresden'
option 'homepage' 'http://www.piraten-sachsen.de/'
option 'ssid' 'dresden.freifunk.net'
option 'mesh_network' '10.12.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '51.05081'
option 'longitude' '13.73420'
config 'defaults' 'wifi_device'
option 'channel' '1'

View file

@ -0,0 +1,15 @@
config 'community' 'profile'
option 'name' 'Freifunk Potsdam'
option 'homepage' 'http://potsdam.freifunk.net'
option 'ssid' 'www.freifunk-potsdam.de'
option 'mesh_network' '10.22.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '52.39349'
option 'longitude' '13.06489'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'
config 'defaults' 'wifi_device'
option 'channel' '13'

View file

@ -0,0 +1,18 @@
config 'community' 'profile'
option 'name' 'Freifunk Rosbach'
option 'homepage' 'freifunk-rosbach.de'
option 'ssid' 'rosbach.freifunk.net'
option 'mesh_network' '10.212.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '50.18'
option 'longitude' '8.42'
config 'defaults' 'wifi_device'
option 'channel' '13'
config 'defaults' 'wifi_iface'
option 'bssid' 'D2:CA:FF:EE:BA:BE'
config 'defaults' 'interface'
option 'netmask' '255.255.0.0'

View file

@ -0,0 +1,16 @@
config 'community' 'profile'
option 'name' 'Freifunk Seefeld'
option 'homepage' 'http://wiki.freifunk.net/Seefeld.freifunk.net'
option 'ssid' 'seefeld.freifunk.net'
option 'mesh_network' '10.111.0.0/16'
option 'splash_network' '10.104.0.0/16'
option 'splash_prefix' '27'
option 'latitude' '48.03485'
option 'longitude' '11.21279'
config 'defaults' 'interface'
option 'netmask' '255.255.255.0'
config 'defaults' 'wifi_device'
option 'channel' '1'
option 'bssid' '02:CA:FF:EE:BA:BB'

View file

@ -0,0 +1,16 @@
config 'community' 'profile'
option 'name' 'wlan ljubljana'
option 'homepage' 'http://wlan-lj.net'
option 'ssid' 'open.wlan-lj.net'
option 'mesh_network' '10.254.0.0/16'
option 'splash_network' '10.254.120.0/21'
option 'splash_prefix' '27'
option 'latitude' '46.05063'
option 'longitude' '14.50402'
config 'defaults' 'wifi_device'
option 'channel' '8'
config 'defaults' 'interface'
option 'dns' '10.254.0.1 10.254.0.2'
option 'netmask' '255.255.0.0'

View file

@ -22,19 +22,16 @@ local cattree = category and luci.dispatcher.node(category)
local node = luci.dispatcher.context.dispatched
local hostname = luci.sys.hostname()
local c = luci.model.uci.cursor():get_all("freifunk", "community")
if c and c.name then
community = c.name
else
community = "Freifunk"
local uci = require "luci.model.uci".cursor()
local ff = uci:get("freifunk", "community", "name")
if not ff then
ff = ""
end
local co = "profile_" .. ff
local community = uci:get_first(co, "community", "name") or "Freifunk"
local hp = uci:get_first(co, "community", "homepage") or "http://www.freifunk.net"
if c and c.homepage then
homepage = c.homepage
else
homepage = "http://freifunk.net"
end
local c = tree
for i,r in ipairs(request) do
@ -88,8 +85,8 @@ require("luci.http").prepare_content("application/xhtml+xml")
<div id="header">
<span id="header_left">
<a href="<%=homepage%>"><img src="/luci-static/freifunk-generic/logo.jpg" alt="FF Logo" /></a>
<a href="<%=homepage%>"><%=community%></a>
<a href="<%=hp%>"><img src="/luci-static/freifunk-generic/logo.jpg" alt="FF Logo" /></a>
<a href="<%=hp%>"><%=community%></a>
</span>
<p>
<%=luci.version.distversion%><br />