summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xmodules/freifunk/root/etc/init.d/freifunk6
-rwxr-xr-xmodules/freifunk/root/usr/sbin/ff_olsr_test_gw52
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