[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