[Berlin-wireless] default route

Edmund Stranzenbach stranzenbach
Fr Jan 8 20:13:59 CET 2010


Hallo

Am Donnerstag 07 Januar 2010 22:15:57 schrieb Jo-Philipp Wich:
> Hi.
>
> > Unsere Router in Wiesenburg haben kein WAN Anschluß. Sei sitzen alle
> > an einem lokalen Netz (mit DSL-Anschluß). z.B. lokales Netzt mir
> > 192.168.0.0/24 mit 192.168.0.1 als DSL-Router (z.B. Fritzbox etc.)
> > und 192.168.0.2 als Freifunkrouter.
>
> Ah, dann ist es kein Wunder dass das passiert, was passiert :)
> Das Check-Script löscht in der Tat lediglich die Default-Route und
> verlässt sich darauf das Irgendwas im System die wider herstellt (pppd,
> dhcp client, ...).
>
> Bei einer statischen Interface-Konfiguration passiert das natürlich
> nicht bis zum Systemreboot oder wenn jmd. ifdown; ifup ausführt.

Als fix habe ich jetzt dem System (über luci) eine statische route
hinzugefügt:
151.1.1.1/32 gw 192.168.0.1

Dann hab ich mal das Script /usr/sbin/ff_olst_test_gw vie folgt geändert:

#!/usr/bin/lua
local STRICT = true -- Only delete metric 0 routes
local PINGCMD = "ping -q -I%s -c3 -w3 '%s' >/dev/null 2>&1"
--------------------------------neu zeile
----------------------------------------------------------
local PINGCMD2 = "ping -q -c1 -w3 '151.1.1.1' >/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"
---------------------------------neue zeile
--------------------------------------------------------
local ROUTEINS = "route add default gw '192.168.0.1' >/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
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", 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
--------------------------------- neue section
--------------------------------------------------------------
else    -- dyn_gw is disabled, we have no defaultroute, test internet access
        if not (sys.call(PINCMD2) == 0) then
                sys.call(ROUTEINS)    -- restore
def_gateway

end

end


Das holt die default route zurück.
Leider habe ich nocht nicht rausgefunden wie man diese statische route und
das default gateway in lua adressiert (deshalb feste Werte, dei natürlich
nicht für alle systeme passen).

Kommentare?

MFG Eddy

-- 
Ing. E. STranzenbach, Görzkerstr. 23, 14827 Wiesenburg
Tel.: 03222 3333 499
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.berlin.freifunk.net/pipermail/berlin/attachments/20100108/f60d274c/attachment.html>



Mehr Informationen über die Mailingliste Berlin