[Freifunk Franken] Der altbekannte Bug / Konektivitäts watchdog

Tim Niemeyer tim.niemeyer at mastersword.de
Mo Jul 22 21:42:32 CEST 2013


Hi Tarek

Am Montag, den 22.07.2013, 02:11 +0200 schrieb Jan-Tarek Butt:
> ich habe auf wunsch von Tim die Watchdog datei noch mal ungezipt
> angehängt 
Ja, danke.. Nur so kann ich hier direkt Kommentare in die Mail packen.
Und das ist ja Sinn und Zweck dieser Sache.

Gern wäre ich die beschriebenen Zustände kurz durchgegangen, musste dann
aber aufgeben, weil ich durch das a-f nicht durchgestiegen bin. Im
Grunde hat sich das Skript aber deutlich verbessert in Vergleich zu den
vorherigen Versionen. Auch der Ansatz mit dem Cron finde ich soweit ganz
gut.

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.
> 
> #-----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.

> #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.

>         #ü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?

>         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.

>         #ü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 

Auch hier hat das sysfs etwas zu bieten:
/sys/kernel/debug/batman_adv/bat0/originators

>         if [ $orginator -eq 0 -a $e -eq 0 ]; then
>         e=1
>         sed -i "5c $e" $varfile
>         fi
Was war nochmal e?

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 ---

LG
Tim
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 836 bytes
Beschreibung: This is a digitally signed message part
URL         : <http://lists.freifunk.net/mailman/private/franken-freifunk.net/attachments/20130722/5539488b/attachment.sig>


Mehr Informationen über die Mailingliste franken