diff options
-rwxr-xr-x | modules/freifunk/root/etc/init.d/freifunk | 6 | ||||
-rwxr-xr-x | modules/freifunk/root/usr/sbin/ff_olsr_test_gw | 52 |
2 files changed, 31 insertions, 27 deletions
diff --git a/modules/freifunk/root/etc/init.d/freifunk b/modules/freifunk/root/etc/init.d/freifunk index 801dd5bc7..f1b274471 100755 --- a/modules/freifunk/root/etc/init.d/freifunk +++ b/modules/freifunk/root/etc/init.d/freifunk @@ -9,9 +9,9 @@ boot() { echo "*/5 * * * * killall -HUP dnsmasq" >> /etc/crontabs/root } -# grep -q '/usr/sbin/ff_olsr_test_gw' /etc/crontabs/root || { -# echo "* * * * * /usr/sbin/ff_olsr_test_gw" >> /etc/crontabs/root -# } + grep -q '/usr/sbin/ff_olsr_test_gw' /etc/crontabs/root || { + echo "* * * * * /usr/sbin/ff_olsr_test_gw" >> /etc/crontabs/root + } [ -f /etc/rc.local ] && . /etc/rc.local [ -d /etc/rc.local.d ] && { diff --git a/modules/freifunk/root/usr/sbin/ff_olsr_test_gw b/modules/freifunk/root/usr/sbin/ff_olsr_test_gw index dda6a5ea7..5c47b498d 100755 --- a/modules/freifunk/root/usr/sbin/ff_olsr_test_gw +++ b/modules/freifunk/root/usr/sbin/ff_olsr_test_gw @@ -4,34 +4,38 @@ 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 ucisec = "ff_olsr_test_gw" 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 + 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
\ No newline at end of file + 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", ucisec, "noinet_count")) + if not THRESHOLD or (count and count >= THRESHOLD) then + sys.call(ROUTECMD % droute.gateway:string()) + else + if not count then + uci:set("olsrd", ucisec, "state") + end + uci:set("olsrd", ucisec, "noinet_count", (count or 0) + 1) + uci:save("olsrd") + end + else + uci:revert("olsrd", ucisec) + end +end |