Merge r4191
This commit is contained in:
parent
38ed02962c
commit
410886fea5
1 changed files with 37 additions and 0 deletions
37
modules/freifunk/root/usr/sbin/ff_olsr_test_gw
Executable file
37
modules/freifunk/root/usr/sbin/ff_olsr_test_gw
Executable file
|
@ -0,0 +1,37 @@
|
|||
#!/usr/bin/lua
|
||||
local STRICT = true -- Only delete metric 0 routes
|
||||
local PINGCMD = "ping -q -I%s -c3 -w3 '%s' >/dev/null 2>&1"
|
||||
local PINGTRG = {"google.de", "www.de.debian.org", "eu.kernel.org", "freifunk.net"}
|
||||
local ROUTECMD = "route del default gw '%s' >/dev/null 2>&1"
|
||||
local THRESHOLD = 3 -- Maximum number of failed tests before dropping the route
|
||||
|
||||
local sys = require "luci.sys"
|
||||
local uci = require "luci.model.uci".cursor_state()
|
||||
local section = nil
|
||||
|
||||
uci:foreach("olsrd", "LoadPlugin", function(s)
|
||||
if s.library == "olsrd_dyn_gw_plain.so.0.4" and s.ignore ~= "1" then
|
||||
section = s[".name"]
|
||||
end
|
||||
end)
|
||||
|
||||
local droute = sys.net.defaultroute()
|
||||
if section and droute then -- dyn_gw is enabled and we have a defaultroute, test it
|
||||
local state = false
|
||||
|
||||
for _, host in ipairs(PINGTRG) do
|
||||
state = state or (sys.call(PINGCMD % {droute.device, host}) == 0)
|
||||
end
|
||||
|
||||
if not state and (not STRICT or tonumber(droute.metric) == 0) then
|
||||
local count = tonumber(uci:get("olsrd", section, "noinet_count"))
|
||||
if not THRESHOLD or (count and count > THRESHOLD) then
|
||||
sys.call(ROUTECMD % droute.gateway:string())
|
||||
else
|
||||
uci:set("olsrd", section, "noinet_count", (count or 0) + 1)
|
||||
end
|
||||
else
|
||||
uci:set("olsrd", section, "noinet_count", "0")
|
||||
end
|
||||
uci:save("olsrd")
|
||||
end
|
Loading…
Reference in a new issue