[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