* 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")
|
subnet:depends("wifi", "1")
|
||||||
for i=0, 255 do
|
for i=0, 255 do
|
||||||
subnet:value(i)
|
subnet:value(i)
|
||||||
end
|
end
|
||||||
function subnet.cfgvalue(self, section)
|
function subnet.cfgvalue(self, section)
|
||||||
return uci:get("freifunk", "wizard", "subnet")
|
return uci:get("freifunk", "wizard", "subnet")
|
||||||
end
|
end
|
||||||
|
@ -114,14 +114,14 @@ function main.write(self, section, value)
|
||||||
if value == "0" then
|
if value == "0" then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local device = dev:formvalue(section)
|
local device = dev:formvalue(section)
|
||||||
|
|
||||||
-- Collect IP-Address
|
-- Collect IP-Address
|
||||||
local inet = net:formvalue(section)
|
local inet = net:formvalue(section)
|
||||||
local isubnet = subnet:formvalue(section)
|
local isubnet = subnet:formvalue(section)
|
||||||
local inode = node:formvalue(section)
|
local inode = node:formvalue(section)
|
||||||
|
|
||||||
-- Invalidate fields
|
-- Invalidate fields
|
||||||
if not inet then
|
if not inet then
|
||||||
net.tag_missing[section] = true
|
net.tag_missing[section] = true
|
||||||
|
@ -132,14 +132,14 @@ function main.write(self, section, value)
|
||||||
if not inode then
|
if not inode then
|
||||||
node.tag_missing[section] = true
|
node.tag_missing[section] = true
|
||||||
end
|
end
|
||||||
|
|
||||||
if not inet or not isubnet or not inode then
|
if not inet or not isubnet or not inode then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local ip = "%s.%s.%s" % {inet, isubnet, inode}
|
local ip = "%s.%s.%s" % {inet, isubnet, inode}
|
||||||
|
|
||||||
|
|
||||||
-- Cleanup
|
-- Cleanup
|
||||||
luci.util.perror("1")
|
luci.util.perror("1")
|
||||||
tools.wifi_delete_ifaces(device)
|
tools.wifi_delete_ifaces(device)
|
||||||
|
@ -147,44 +147,44 @@ function main.write(self, section, value)
|
||||||
tools.network_remove_interface(device)
|
tools.network_remove_interface(device)
|
||||||
luci.util.perror("3")
|
luci.util.perror("3")
|
||||||
tools.firewall_zone_remove_interface("freifunk", device)
|
tools.firewall_zone_remove_interface("freifunk", device)
|
||||||
|
|
||||||
|
|
||||||
-- Tune wifi device
|
-- Tune wifi device
|
||||||
local devconfig = _strip_internals(uci:get_all("freifunk", "wifi_device"))
|
local devconfig = _strip_internals(uci:get_all("freifunk", "wifi_device"))
|
||||||
uci:tset("wireless", device, devconfig)
|
uci:tset("wireless", device, devconfig)
|
||||||
|
|
||||||
-- Create wifi iface
|
-- Create wifi iface
|
||||||
local ifconfig = _strip_internals(uci:get_all("freifunk", "wifi_iface"))
|
local ifconfig = _strip_internals(uci:get_all("freifunk", "wifi_iface"))
|
||||||
ifconfig.device = device
|
ifconfig.device = device
|
||||||
ifconfig.network = device
|
ifconfig.network = device
|
||||||
uci:section("wireless", "wifi-iface", nil, ifconfig)
|
uci:section("wireless", "wifi-iface", nil, ifconfig)
|
||||||
|
|
||||||
-- Save wifi
|
-- Save wifi
|
||||||
uci:save("wireless")
|
uci:save("wireless")
|
||||||
|
|
||||||
-- Create firewall zone and add default rules (first time)
|
-- Create firewall zone and add default rules (first time)
|
||||||
local newzone = tools.firewall_create_zone("freifunk", "DROP", "ACCEPT", "DROP", true)
|
local newzone = tools.firewall_create_zone("freifunk", "DROP", "ACCEPT", "DROP", true)
|
||||||
if newzone then
|
if newzone then
|
||||||
uci:foreach("freifunk", "fw_forwarding", function(section)
|
uci:foreach("freifunk", "fw_forwarding", function(section)
|
||||||
uci:section("firewall", "forwarding", nil, _strip_internals(section))
|
uci:section("firewall", "forwarding", nil, _strip_internals(section))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
uci:foreach("freifunk", "fw_rule", function(section)
|
uci:foreach("freifunk", "fw_rule", function(section)
|
||||||
uci:section("firewall", "rule", nil, _strip_internals(section))
|
uci:section("firewall", "rule", nil, _strip_internals(section))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
uci:save("firewall")
|
uci:save("firewall")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Crate network interface
|
-- Crate network interface
|
||||||
local netconfig = _strip_internals(uci:get_all("freifunk", "interface"))
|
local netconfig = _strip_internals(uci:get_all("freifunk", "interface"))
|
||||||
netconfig.proto = "static"
|
netconfig.proto = "static"
|
||||||
netconfig.ipaddr = ip
|
netconfig.ipaddr = ip
|
||||||
uci:section("network", "interface", device, netconfig)
|
uci:section("network", "interface", device, netconfig)
|
||||||
|
|
||||||
uci:save("network")
|
uci:save("network")
|
||||||
|
|
||||||
tools.firewall_zone_add_interface("freifunk", device)
|
tools.firewall_zone_add_interface("freifunk", device)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -193,17 +193,18 @@ function olsr.write(self, section, value)
|
||||||
if value == "0" then
|
if value == "0" then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local device = dev:formvalue(section)
|
local device = dev:formvalue(section)
|
||||||
|
|
||||||
-- Delete old interface
|
-- Delete old interface
|
||||||
uci:delete_all("freifunk", "Interface", {Interface=device})
|
uci:delete_all("freifunk", "Interface", {Interface=device})
|
||||||
|
|
||||||
-- Write new interface
|
-- Write new interface
|
||||||
local olsrbase = _strip_internals(uci:get_all("freifunk", "olsr_interface"))
|
local olsrbase = _strip_internals(uci:get_all("freifunk", "olsr_interface"))
|
||||||
olsrbase.Interface = device
|
olsrbase.interface = device
|
||||||
uci:section("olsr", "Interface", nil, olsrbase)
|
olsrbase.ignore = "0"
|
||||||
uci:save("olsr")
|
uci:section("olsrd", "Interface", nil, olsrbase)
|
||||||
|
uci:save("olsrd")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -211,9 +212,9 @@ function share.write(self, section, value)
|
||||||
if value == "maybe" then
|
if value == "maybe" then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
uci:delete_all("firewall", "forwarding", {src="freifunk", dest="wan"})
|
uci:delete_all("firewall", "forwarding", {src="freifunk", dest="wan"})
|
||||||
|
|
||||||
if value == "yes" then
|
if value == "yes" then
|
||||||
uci:section("firewall", "forwarding", nil, {src="freifunk", dest="wan"})
|
uci:section("firewall", "forwarding", nil, {src="freifunk", dest="wan"})
|
||||||
end
|
end
|
||||||
|
@ -225,25 +226,25 @@ function client.write(self, section, value)
|
||||||
if value == "0" then
|
if value == "0" then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local device = dev:formvalue(section)
|
local device = dev:formvalue(section)
|
||||||
|
|
||||||
-- Collect IP-Address
|
-- Collect IP-Address
|
||||||
local inet = net:formvalue(section)
|
local inet = net:formvalue(section)
|
||||||
local isubnet = subnet:formvalue(section)
|
local isubnet = subnet:formvalue(section)
|
||||||
local inode = node:formvalue(section)
|
local inode = node:formvalue(section)
|
||||||
|
|
||||||
if not inet or not isubnet or not inode then
|
if not inet or not isubnet or not inode then
|
||||||
return
|
return
|
||||||
end
|
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 dclient = "%s.%s.%s" % {inet:gsub("^[0-9]+", "10"), isubnet, dhcpbeg}
|
||||||
local limit = dhcpbeg < 252 and 3 or 2
|
local limit = dhcpbeg < 252 and 3 or 2
|
||||||
|
|
||||||
-- Delete old alias
|
-- Delete old alias
|
||||||
uci:delete("network", device .. "dhcp")
|
uci:delete("network", device .. "dhcp")
|
||||||
|
|
||||||
-- Create alias
|
-- Create alias
|
||||||
local aliasbase = _strip_internals(uci:get_all("freifunk", "alias"))
|
local aliasbase = _strip_internals(uci:get_all("freifunk", "alias"))
|
||||||
aliasbase.interface = device
|
aliasbase.interface = device
|
||||||
|
@ -251,8 +252,8 @@ function client.write(self, section, value)
|
||||||
aliasbase.proto = "static"
|
aliasbase.proto = "static"
|
||||||
uci:section("network", "alias", device .. "dhcp", aliasbase)
|
uci:section("network", "alias", device .. "dhcp", aliasbase)
|
||||||
uci:save("network")
|
uci:save("network")
|
||||||
|
|
||||||
|
|
||||||
-- Create dhcp
|
-- Create dhcp
|
||||||
local dhcpbase = _strip_internals(uci:get_all("freifunk", "dhcp"))
|
local dhcpbase = _strip_internals(uci:get_all("freifunk", "dhcp"))
|
||||||
dhcpbase.interface = device .. "dhcp"
|
dhcpbase.interface = device .. "dhcp"
|
||||||
|
@ -261,14 +262,14 @@ function client.write(self, section, value)
|
||||||
|
|
||||||
uci:section("dhcp", "dhcp", device .. "dhcp", dhcpbase)
|
uci:section("dhcp", "dhcp", device .. "dhcp", dhcpbase)
|
||||||
uci:save("dhcp")
|
uci:save("dhcp")
|
||||||
|
|
||||||
|
|
||||||
-- Delete old splash
|
-- Delete old splash
|
||||||
uci:delete_all("luci_splash", "iface", {net=device, zone="freifunk"})
|
uci:delete_all("luci_splash", "iface", {net=device, zone="freifunk"})
|
||||||
|
|
||||||
-- Register splash
|
-- Register splash
|
||||||
uci:section("luci_splash", "iface", nil, {net=device, zone="freifunk"})
|
uci:section("luci_splash", "iface", nil, {net=device, zone="freifunk"})
|
||||||
uci:save("luci_splash")
|
uci:save("luci_splash")
|
||||||
end
|
end
|
||||||
|
|
||||||
return f
|
return f
|
||||||
|
|
|
@ -32,35 +32,35 @@ end
|
||||||
-- Deletes a network interface and all occurences of it in firewall zones and dhcp
|
-- Deletes a network interface and all occurences of it in firewall zones and dhcp
|
||||||
function network_remove_interface(iface)
|
function network_remove_interface(iface)
|
||||||
local cursor = uci.cursor()
|
local cursor = uci.cursor()
|
||||||
|
|
||||||
if not cursor:delete("network", iface) then
|
if not cursor:delete("network", iface) then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
local aliases = {iface}
|
local aliases = {iface}
|
||||||
cursor:foreach("network", "alias",
|
cursor:foreach("network", "alias",
|
||||||
function(section)
|
function(section)
|
||||||
if section.interface == iface then
|
if section.interface == iface then
|
||||||
table.insert(aliases, section[".name"])
|
table.insert(aliases, section[".name"])
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Delete Aliases and Routes
|
-- Delete Aliases and Routes
|
||||||
cursor:delete_all("network", "route", {interface=iface})
|
cursor:delete_all("network", "route", {interface=iface})
|
||||||
cursor:delete_all("network", "alias", {interface=iface})
|
cursor:delete_all("network", "alias", {interface=iface})
|
||||||
|
|
||||||
-- Delete DHCP sections
|
-- Delete DHCP sections
|
||||||
cursor:delete_all("dhcp", "dhcp",
|
cursor:delete_all("dhcp", "dhcp",
|
||||||
function(section)
|
function(section)
|
||||||
return util.contains(aliases, section.interface)
|
return util.contains(aliases, section.interface)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Remove OLSR sections
|
-- Remove OLSR sections
|
||||||
cursor:delete_all("olsr", "Interface", {Interface=iface})
|
cursor:delete_all("olsrd", "Interface", {Interface=iface})
|
||||||
|
|
||||||
-- Remove Splash sections
|
-- Remove Splash sections
|
||||||
cursor:delete_all("luci-splash", "iface", {network=iface})
|
cursor:delete_all("luci-splash", "iface", {network=iface})
|
||||||
|
|
||||||
cursor:save("network")
|
cursor:save("network")
|
||||||
cursor:save("olsr")
|
cursor:save("olsr")
|
||||||
cursor:save("dhcp")
|
cursor:save("dhcp")
|
||||||
|
@ -115,14 +115,14 @@ end
|
||||||
-- Finds the firewall zone with given name
|
-- Finds the firewall zone with given name
|
||||||
function firewall_find_zone(name)
|
function firewall_find_zone(name)
|
||||||
local find
|
local find
|
||||||
|
|
||||||
uci.cursor():foreach("firewall", "zone",
|
uci.cursor():foreach("firewall", "zone",
|
||||||
function (section)
|
function (section)
|
||||||
if section.name == name then
|
if section.name == name then
|
||||||
find = section[".name"]
|
find = section[".name"]
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
return find
|
return find
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -135,15 +135,15 @@ function remove_list_entry(value, entry)
|
||||||
if type(value) == "nil" then
|
if type(value) == "nil" then
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
local result = type(value) == "table" and value or util.split(value, " ")
|
local result = type(value) == "table" and value or util.split(value, " ")
|
||||||
local key = util.contains(result, entry)
|
local key = util.contains(result, entry)
|
||||||
|
|
||||||
while key do
|
while key do
|
||||||
table.remove(result, key)
|
table.remove(result, key)
|
||||||
key = util.contains(result, entry)
|
key = util.contains(result, entry)
|
||||||
end
|
end
|
||||||
|
|
||||||
result = type(value) == "table" and result or table.concat(result, " ")
|
result = type(value) == "table" and result or table.concat(result, " ")
|
||||||
return result ~= value and result
|
return result ~= value and result
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue