* luci/app/ffwizard: sync olsr configuration
This commit is contained in:
parent
b3cab35609
commit
95c444c539
2 changed files with 56 additions and 55 deletions
|
@ -52,7 +52,7 @@ subnet.rmempty = true
|
|||
subnet:depends("wifi", "1")
|
||||
for i=0, 255 do
|
||||
subnet:value(i)
|
||||
end
|
||||
end
|
||||
function subnet.cfgvalue(self, section)
|
||||
return uci:get("freifunk", "wizard", "subnet")
|
||||
end
|
||||
|
@ -114,14 +114,14 @@ function main.write(self, section, value)
|
|||
if value == "0" then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local device = dev:formvalue(section)
|
||||
|
||||
-- Collect IP-Address
|
||||
local inet = net:formvalue(section)
|
||||
local isubnet = subnet:formvalue(section)
|
||||
local inode = node:formvalue(section)
|
||||
|
||||
|
||||
-- Invalidate fields
|
||||
if not inet then
|
||||
net.tag_missing[section] = true
|
||||
|
@ -132,14 +132,14 @@ function main.write(self, section, value)
|
|||
if not inode then
|
||||
node.tag_missing[section] = true
|
||||
end
|
||||
|
||||
|
||||
if not inet or not isubnet or not inode then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local ip = "%s.%s.%s" % {inet, isubnet, inode}
|
||||
|
||||
|
||||
|
||||
|
||||
-- Cleanup
|
||||
luci.util.perror("1")
|
||||
tools.wifi_delete_ifaces(device)
|
||||
|
@ -147,44 +147,44 @@ function main.write(self, section, value)
|
|||
tools.network_remove_interface(device)
|
||||
luci.util.perror("3")
|
||||
tools.firewall_zone_remove_interface("freifunk", device)
|
||||
|
||||
|
||||
|
||||
|
||||
-- Tune wifi device
|
||||
local devconfig = _strip_internals(uci:get_all("freifunk", "wifi_device"))
|
||||
uci:tset("wireless", device, devconfig)
|
||||
|
||||
|
||||
-- Create wifi iface
|
||||
local ifconfig = _strip_internals(uci:get_all("freifunk", "wifi_iface"))
|
||||
ifconfig.device = device
|
||||
ifconfig.network = device
|
||||
uci:section("wireless", "wifi-iface", nil, ifconfig)
|
||||
|
||||
|
||||
-- Save wifi
|
||||
uci:save("wireless")
|
||||
|
||||
uci:save("wireless")
|
||||
|
||||
-- Create firewall zone and add default rules (first time)
|
||||
local newzone = tools.firewall_create_zone("freifunk", "DROP", "ACCEPT", "DROP", true)
|
||||
if newzone then
|
||||
uci:foreach("freifunk", "fw_forwarding", function(section)
|
||||
uci:section("firewall", "forwarding", nil, _strip_internals(section))
|
||||
end)
|
||||
|
||||
|
||||
uci:foreach("freifunk", "fw_rule", function(section)
|
||||
uci:section("firewall", "rule", nil, _strip_internals(section))
|
||||
end)
|
||||
|
||||
|
||||
uci:save("firewall")
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
-- Crate network interface
|
||||
local netconfig = _strip_internals(uci:get_all("freifunk", "interface"))
|
||||
netconfig.proto = "static"
|
||||
netconfig.ipaddr = ip
|
||||
uci:section("network", "interface", device, netconfig)
|
||||
|
||||
|
||||
uci:save("network")
|
||||
|
||||
|
||||
tools.firewall_zone_add_interface("freifunk", device)
|
||||
end
|
||||
|
||||
|
@ -193,17 +193,18 @@ function olsr.write(self, section, value)
|
|||
if value == "0" then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local device = dev:formvalue(section)
|
||||
|
||||
|
||||
-- Delete old interface
|
||||
uci:delete_all("freifunk", "Interface", {Interface=device})
|
||||
|
||||
|
||||
-- Write new interface
|
||||
local olsrbase = _strip_internals(uci:get_all("freifunk", "olsr_interface"))
|
||||
olsrbase.Interface = device
|
||||
uci:section("olsr", "Interface", nil, olsrbase)
|
||||
uci:save("olsr")
|
||||
olsrbase.interface = device
|
||||
olsrbase.ignore = "0"
|
||||
uci:section("olsrd", "Interface", nil, olsrbase)
|
||||
uci:save("olsrd")
|
||||
end
|
||||
|
||||
|
||||
|
@ -211,9 +212,9 @@ function share.write(self, section, value)
|
|||
if value == "maybe" then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
uci:delete_all("firewall", "forwarding", {src="freifunk", dest="wan"})
|
||||
|
||||
|
||||
if value == "yes" then
|
||||
uci:section("firewall", "forwarding", nil, {src="freifunk", dest="wan"})
|
||||
end
|
||||
|
@ -225,25 +226,25 @@ function client.write(self, section, value)
|
|||
if value == "0" then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local device = dev:formvalue(section)
|
||||
|
||||
-- Collect IP-Address
|
||||
local inet = net:formvalue(section)
|
||||
local isubnet = subnet:formvalue(section)
|
||||
local inode = node:formvalue(section)
|
||||
|
||||
|
||||
if not inet or not isubnet or not inode then
|
||||
return
|
||||
end
|
||||
|
||||
local dhcpbeg = 48 + tonumber(inode) * 4
|
||||
|
||||
local dhcpbeg = 48 + tonumber(inode) * 4
|
||||
local dclient = "%s.%s.%s" % {inet:gsub("^[0-9]+", "10"), isubnet, dhcpbeg}
|
||||
local limit = dhcpbeg < 252 and 3 or 2
|
||||
|
||||
|
||||
-- Delete old alias
|
||||
uci:delete("network", device .. "dhcp")
|
||||
|
||||
|
||||
-- Create alias
|
||||
local aliasbase = _strip_internals(uci:get_all("freifunk", "alias"))
|
||||
aliasbase.interface = device
|
||||
|
@ -251,8 +252,8 @@ function client.write(self, section, value)
|
|||
aliasbase.proto = "static"
|
||||
uci:section("network", "alias", device .. "dhcp", aliasbase)
|
||||
uci:save("network")
|
||||
|
||||
|
||||
|
||||
|
||||
-- Create dhcp
|
||||
local dhcpbase = _strip_internals(uci:get_all("freifunk", "dhcp"))
|
||||
dhcpbase.interface = device .. "dhcp"
|
||||
|
@ -261,14 +262,14 @@ function client.write(self, section, value)
|
|||
|
||||
uci:section("dhcp", "dhcp", device .. "dhcp", dhcpbase)
|
||||
uci:save("dhcp")
|
||||
|
||||
|
||||
|
||||
|
||||
-- Delete old splash
|
||||
uci:delete_all("luci_splash", "iface", {net=device, zone="freifunk"})
|
||||
|
||||
|
||||
-- Register splash
|
||||
uci:section("luci_splash", "iface", nil, {net=device, zone="freifunk"})
|
||||
uci:save("luci_splash")
|
||||
end
|
||||
|
||||
return f
|
||||
return f
|
||||
|
|
|
@ -32,35 +32,35 @@ 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",
|
||||
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("olsr", "Interface", {Interface=iface})
|
||||
|
||||
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")
|
||||
|
@ -115,14 +115,14 @@ end
|
|||
-- Finds the firewall zone with given name
|
||||
function firewall_find_zone(name)
|
||||
local find
|
||||
|
||||
uci.cursor():foreach("firewall", "zone",
|
||||
|
||||
uci.cursor():foreach("firewall", "zone",
|
||||
function (section)
|
||||
if section.name == name then
|
||||
find = section[".name"]
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
return find
|
||||
end
|
||||
|
||||
|
@ -135,15 +135,15 @@ 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
|
||||
return result ~= value and result
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue