#!/bin/sh
#
# Automatische Wahl der richtigen Antenne - Bastian Bittorf /weimarnetz - $VER 2006aug31,12uhr07
#
RX=$(nvram get wl0_antdiv)
TX=$(nvram get ff_txant)
PRE="AUTOANT-WAHL: "
ENDE=0
CONF="/etc/olsrd.conf"
PAUSE=$(awk '{if($1=="LinkQualityWinSize")s=$2;if($1=="HelloInterval"){print s*$2;exit}}' $CONF)
eval $(netparam)
logger $PRE"Start..."
if [ "$RX" = "-1" ] && [ "$TX" = "-1" ] && [ "$(nvram get ff_httpinfo)" = 1 ]
then
#
# Antenne A einstellen, starten einer neuen Messreihe, warten
#
logger $PRE"Antenne A einstellen und $PAUSE sek. warten..."
wl -i $WIFIDEV antdiv 0
wl -i $WIFIDEV txant 0
sleep $PAUSE
#
# Erfassen der Messwerte je nach Plugin unterschiedlich
#
if [ -n "$(grep httpinfo $CONF)" ]
then
logger $PRE"httpinfo-Plugin (Port 8080) erkannt..."
eval $(wget -O - http://127.0.0.1:8080/nodes|awk -F"[< =>]" '{
if(s==1&&$0=="</table>")exit
if(s==1){z++;p=p+$21;etx=etx+$33}
if($3=="width")s=1}
END{print "NACHBAR1="z";PAKETE1="p";ETXSUM1="etx*100";ETXSUM="etx}')
fi
if [ -n "$(grep txtinfo $CONF)" ]
then
logger $PRE"txtinfo-Plugin (Port 2006) erkannt..."
eval $(wget -O - http://127.0.0.1:2006/neighbours|grep $WIFIADR|awk '{
z++;p=p+$6;etx=etx+$8}
END{print "NACHBAR1="z";PAKETE1="p";ETXSUM1="etx*100";ETXSUM="etx}')
fi
logger $PRE"Nachbarn,Pakete,ETXsum = $NACHBAR1, $PAKETE1, $ETXSUM"
#
# Antenne B einstellen, starten einer neuen Messreihe, warten
#
logger "AUTOANT-WAHL: Antenne B einstellen, OLSR-Neustart erzwingen und $PAUSE sek. warten..."
wl -i $WIFIDEV antdiv 1
wl -i $WIFIDEV txant 1
/etc/init.d/S53olsrd restart
sleep $PAUSE
#
# Erfassen der Messwerte je nach Plugin unterschiedlich
#
if [ -n "$(grep httpinfo $CONF)" ]
then
eval $(wget -O - http://127.0.0.1:8080/nodes|awk -F"[< =>]" '{
if(s==1&&$0=="</table>")exit
if(s==1){z++;p=p+$21;etx=etx+$33}
if($3=="width")s=1}
END{print "NACHBAR1="z";PAKETE1="p";ETXSUM1="etx*100";ETXSUM="etx}')
fi
if [ -n "$(grep txtinfo $CONF)" ]
then
eval $(wget -O - http://127.0.0.1:2006/neighbours|grep $WIFIADR|awk '{
z++;p=p+$6;etx=etx+$8}
END{print "NACHBAR2="z";PAKETE2="p";ETXSUM2="etx*100";ETXSUM="etx}')
fi
#
# Vergleiche & Auswertungen
#
logger $PRE"Nachbarn,Pakete,ETXsum = $NACHBAR2, $PAKETE2, $ETXSUM"
if [ "$ENDE" = 0 ];then logger "AUTOANT-WAHL: Nachbaranzahl vergleichen...";fi
if [ "$NACHBAR1" -gt "$NACHBAR2" ] && [ "$ENDE" = 0 ];then ENDE=1;ANT=A;fi
if [ "$NACHBAR1" -lt "$NACHBAR2" ] && [ "$ENDE" = 0 ];then ENDE=1;fi
if [ "$ENDE" = 0 ];then logger "AUTOANT-WAHL: Paketanzahl vergleichen...";fi
if [ "$PAKETE1" -gt "$PAKETE2" ] && [ "$ENDE" = 0 ];then ENDE=1;ANT=A;fi
if [ "$PAKETE1" -lt "$PAKETE2" ] && [ "$ENDE" = 0 ];then ENDE=1;fi
if [ "$ENDE" = 0 ];then logger "AUTOANT-WAHL: ETX-Summen vergleichen...";fi
if [ "$ETXSUM1" -lt "$ETXSUM2" ] && [ "$ENDE" = 0 ];then ENDE=1;ANT=A;fi
if [ "$ETXSUM1" -gt "$ETXSUM2" ] && [ "$ENDE" = 0 ];then ENDE=1;fi
#
# Umsetzungen der Schlussfolgerung
#
if [ "$ANT" = "A" ]
then
wl -i $WIFIDEV antdiv 0
wl -i $WIFIDEV txant 0
logger $PRE"Antenne A wird genommen..."
else
logger $PRE"Antenne B wird genommen (bzw. gelassen)..."
fi
else
logger $PRE"keine Skriptausfuehrung, Antennenwahl nicht auf Auto oder OLSR-Info-Plugin nicht aktiviert."
fi
logger $PRE"Ende..."
#
# Ende...
#