Fix ff_olsr_test_gw
authorSteven Barth <steven@midlink.org>
Sat, 31 Jan 2009 16:28:34 +0000 (16:28 +0000)
committerSteven Barth <steven@midlink.org>
Sat, 31 Jan 2009 16:28:34 +0000 (16:28 +0000)
modules/freifunk/root/etc/init.d/freifunk
modules/freifunk/root/usr/sbin/ff_olsr_test_gw

index 801dd5b..f1b2744 100755 (executable)
@@ -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 ] && {
index dda6a5e..5c47b49 100755 (executable)
@@ -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