[Freifunk Franken] Der altbekannte Bug / Konektivitäts watchdog
Jan-Tarek Butt
buttjantarek at googlemail.com
Di Jul 23 20:06:09 CEST 2013
Hier noch mal der Watchdog mit den entsprechenden änderungen
#!/bin/bash
# Dieser Watchdog überprüft mit Hilfe von verschiedenen zuständen ob:
# -es sich um einen Mesh Router handelt
# -wenn es sich um ein Mesh Router handelt, ob er korrekt läuft
# -wenn es ich um ein VPN Router handelt der ein Mesh Router im lokalem
Netzt hat, wo der ath9k Bug auftritt ein reboot macht
# -der Zustand wenn ein VPN Router keine lokalen Mesh Router besitzt,
konnte ich bisher nicht definiren
#-----Start Config-----
#Angabe des VPN interfaces aus ifconfig
vpninterface=ffolVPN
#Angabe der Datei um die Werte der Variablen zu Speichern
varfile=watchdogVariabeln
#Meshrouter hat kein Uplink. Reboot nach X Cron abfragen
mupreboot=8
#Mesh beim Meshrouter funktioniert nicht. Reboot nach X Cron abfragen
mmeshreboot=4
#VPNrouter hat keine Verbindung zu Netmon. Reboot nach X Cron abfragen
uupreboot=4
#VPNrouter Mesh funktioniert nicht. Reboot nach X Cron abfragen
umeshreboot=4
#Kontrolle ob mesh router vorhanden nach x cron abfragen zurücksetzen
meshzust=10
#-----End Config-----
#Netmaon Adresse. per uci auslesen
api_ipv6_adress=`uci get configurator. at api[0].ipv6_address`
iface=`uci get configurator. at api[0].ipv6_interface`
netmonadr="$api_ipv6_adress"%"$iface"
#Variabeln auslehsen
meshkeinUP=$(head -n1 $varfile | tail -n1)
meshRkeinmesh=$(head -n2 $varfile | tail -n1)
upkeinnetmon=$(head -n3 $varfile | tail -n1)
upkeinmesh=$(head -n4 $varfile | tail -n1)
meshhisto=$(head -n5 $varfile | tail -n1)
histodauer=$(head -n6 $varfile | tail -n1)
#überprüft ob Netmon ereichtbar ist
ping6 -c 4 $netmonadr;
ping=$?
#überprüft ob der VPN läuft
ifconfig | grep $vpninterface
vpn=$?
#überprüft ob Orginators existieren
batctl o |grep -E "(wlan| $vpninterface )"
orginator=$?
if [ $orginator -eq 0 -a $meshhisto -eq 0 ]; then
meshhisto=1
sed -i "5c $meshhisto" $varfile
fi
if [ $meshhisto -eq 1 ]; then
histodauer=$(( $histodauer + 1 ))
sed -i "6c $histodauer" $varfile
fi
if [ $histodauer -eq $meshzust ]; then
sed -i "6c 0" $varfile
sed -i "5c 0" $varfile
fi
#################################################
# Meshrouter Kontrolle #
#################################################
#Wenn Orginator, Ping gleich 0 sind und vpn gleich 1. Meshrouter
läuft korrekt
if [ $orginator -eq 0 -a $ping -eq 0 -a $vpn -ne 0 ]; then
sed -i "1c 0" $varfile
sed -i "2c 0" $varfile
sed -i "3c 0" $varfile
sed -i "4c 0" $varfile
sed -i "6c 0" $varfile
exit
fi
# Meshrouter hat kein Uplink
if [ $orginator -eq 0 -a $ping -ne 0 -a $vpn -ne 0 ]; then
meshkeinUP=$(( $meshkeinUP + 1 ))
sed -i "1c $meshkeinUP" $varfile
if [ $meshkeinUP -eq $mupreboot ]; then
sed -i "1c 0" $varfile
reboot
fi
fi
#Mesh beim meshrouter funktionirt nicht
if [ $orginator -ne 0 -a $ping -ne 0 -a $vpn -ne 0 ]; then
meshRkeinmesh=$(( $meshRkeinmesh + 1 ))
sed -i "2c $meshRkeinmesh" $varfile
if [ $meshRkeinmesh -eq $mmeshreboot ]; then
sed -i "2c 0" $varfile
reboot
fi
fi
#################################################
# VPN Router Kontrolle #
#################################################
#VPN Router mit lokalem Meshrouter läuft korrekt
if [ $orginator -eq 0 -a $ping -eq 0 -a $vpn -eq 0 ]; then
sed -i "1c 0" $varfile
sed -i "2c 0" $varfile
sed -i "3c 0" $varfile
sed -i "4c 0" $varfile
sed -i "6c 0" $varfile
exit
fi
#VPN Router keine Verbindung zu Netmon
if [ $ping -ne 0 -a $vpn -eq 0 ]; then
upkeinnetmon=$(( $upkeinnetmon + 1 ))
sed -i "3c $upkeinnetmon" $varfile
if [ $upkeinnetmon -eq $uupreboot ]; then
sed -i "3c 0" $varfile
reboot
fi
fi
#VPN Router Mesh funktionirt nicht
if [ $orginator -ne 0 -a $meshhisto -eq 1 -a $vpn -eq 0 ]; then
upkeinmesh=$(( $upkeinmesh + 1 ))
sed -i "4c $upkeinmesh" $varfile
if [ $upkeinmesh -eq $umeshreboot ]; then
sed -i "5c 0" $varfile
Am 23. Juli 2013 16:33 schrieb Jan-Tarek Butt <buttjantarek at googlemail.com>:
> Hallo Tim,
>
>
>> Bitte schau dir unten meine Anmerkungen an und schick es dann ggf
>> nochmal rum.
>> >
>> > Mfg
>> >
>> > Jan-Tarek Butt
>> >
>> > #!/bin/bash
>> >
>> > # Dieser Watchdog überprüft mit hilfe von verschidenen zuständen ob:
>> > # -ob es sich um ein mesh router handelt
>> > # -wenn es sich um ein mesh router handelt ob er korekt läuft
>> > # -wenn es ich um ein VPN router handelt der ein mesh router im
>> > lokalem netzt hat wo der ath9k Bug auftrit ein reboot macht
>> > # der zustand wenn ein VPN router keine lokalen mesh router besitzt
>> > konnte ich bisher nicht definiren
>> Hier bitte dir Rechtschreibung mit einem Tool überprüfen, da sind
>> etliche Fehler drin. Das gilt auch für die folgenden Kommentare.
>>
>
> Hab meine zwillingsschwester Drüber gucken lassen und durfte mich einiges
> anhören ;)
>
>
>> >
>> > #-----Start Config-----
>> > #Angabe des VPN interfaces aus ifconfig
>> > vpninterface=ffolVPN
>> >
>> > #Angabe der datei um die werte der Variablen zu Speichern
>> > varfile=watchdogVariabeln
>> >
>> > #Meshrouter hat kein Uplink. Reboot nach X Cron abfragen
>> > mupreboot=8
>> >
>> > #Mesh beim Meshrouter funktionirt nicht. Reboot nach X Cron abfragen
>> > mmeshreboot=4
>> >
>> > #VPNrouter hat keine verbindung zu Netmon. Reboot nach X Cron abfragen
>> > uupreboot=4
>> >
>> > #VPNrouter Mesh funktionirt nicht. Reboot nach X Cron abfragen
>> > umeshreboot=4
>> >
>> > #Kontrolle ob mesh router vorhanden nach x cron abfragen zurücksetzen
>> > meshzust=10
>> > #-----End Config-----
>> >
>> > #Netmaon Adresse. per uci auslesen
>> > api_ipv6_adress=`uci get configurator. at api[0].ipv6_address`
>> > iface=`uci get configurator. at api[0].ipv6_interface`
>> > netmonadr="$api_ipv6_adress"%"$iface"
>> Hier ist die Frage, was passiert wenn der Netmon Router mal nicht da
>> ist? Es würde vermutlich Sinn machen, mindestens einen zweiten Uplink zu
>> prüfen.
>>
>
> Wir Haben keinen zweiten UP desswegen habe ich das rausgelassen wäre
> natürlich dennoch gut in diesem punkt eine redondans zu haben
>
>
>>
>> > #Variabeln auslehsen
>> > export a=$(cat $varfile | head -n1 | tail -n1)
>> > export b=$(cat $varfile | head -n2 | tail -n1)
>> > export c=$(cat $varfile | head -n3 | tail -n1)
>> > export d=$(cat $varfile | head -n4 | tail -n1)
>> > export e=$(cat $varfile | head -n5 | tail -n1)
>> > export f=$(cat $varfile | head -n6 | tail -n1)
>> Die Variablennamen sind nicht selbsterklärend. Außerdem stimmt hier was
>> mit der Einrückung nicht.
>>
>
> ich hab jetzt das export rausgeschmissen und christians vorschlag
> eingebaut, die variablen sind jetzt auch umbenant
>
>
>>
>> > #überprüft ob Netmon ereichtbar ist
>> > ping6 -c 4 -t 1 $netmonadr;
>> Warum -t1? Letztlich schadet es nicht, aber ist da vielleicht etwas
>> anderes gemeint?
>>
>
> huch das ist für ttl weiß nicht wie das darein gerutsch ist
>
>
>>
>> > ping=$?
>>
>> > #überprüft ob der VPN läuft
>> > ifconfig | grep $vpninterface
>> > vpn=$?
>> test "$(cat /sys/class/net/eth0/operstate)" = "up"
>> Würde mir hier besser gefallen, wobei das sicherlich auch noch besser
>> geht. Grep und ifconfig sind beides schon ziemlich dicke Programme.
>>
>
> damit kann ich nicht das VPNinterface nachgucken es recht nicht nur zu
> gucken ob das eth0 interface vorhaden ist
>
>
>>
>> > #überprüft ob Orginators exestiren
>> > batctl o |grep -E "(wlan| $vpninterface )"
>> > orginator=$?
>> Ich denke, das geht so nicht, da das grep immer etwas finden wird:
>> head -n1 /sys/kernel/debug/batman_adv/bat0/originators
>>
>>
> Doch das geht ich hab es selbs getestet
>
>
>> Auch hier hat das sysfs etwas zu bieten:
>> /sys/kernel/debug/batman_adv/bat0/originators
>>
>
> es geht um dem fall um mesh router im Lokalen netz
>
>
>>
>> > if [ $orginator -eq 0 -a $e -eq 0 ]; then
>> > e=1
>> > sed -i "5c $e" $varfile
>> > fi
>> Was war nochmal e?
>>
>
> :D e speichert die history der mesh router also ob der router in der
> vergangenheit mein eine meshverbindung hatte
>
>
>>
>> Ich breche das ab hier erstmal ab. Bitte erstmal diese Zustandsvariblen
>> sauber machen, sonst kann man das nicht sinnvoll verstehen.
>>
>
>
>> Hier nochmal ein Vorschlag, wie du diese a-f Variblen sauber speichern
>> kannst, ohne jedes mal die sed-Keule zu nutzen:
>> --- 8< ---
>> #!/bin/sh
>>
>> STATEFILE=/tmp/state.conf
>>
>> # Create STATEFILE with default values
>> test -f $STATEFILE || cat <<EOF > $STATEFILE
>> NETMON_PING_FAIL=0
>> ORIGINATOR_FAIL=0
>> EOF
>>
>> # Load STATEFILE
>> . $STATEFILE
>>
>> # check ping
>> # ..
>> NETMON_PING_FAIL=$(( $NETMON_PING_FAIL + 1))
>> # check originators
>> # ..
>>
>> # Save STATEFILE
>> cat <<EOF > $STATEFILE
>> NETMON_PING_FAIL=$NETMON_PING_FAIL
>> ORIGINATOR_FAIL=$ORIGINATOR_FAIL
>> EOF
>> --- >8 ---
>>
>
> muss ich mal bei zeit mit einbauen
>
>
>>
>> LG
>> Tim
>>
>
>
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.freifunk.net/mailman/private/franken-freifunk.net/attachments/20130723/4ee9b1dc/attachment.html>
Mehr Informationen über die Mailingliste franken