#!/bin/sh
# Version 00.00.02
# script fuer CTI  :
# Netzwerk IP pruefen
# wegen dhcp und Switch bootet zu lange, <Erklaerung noch schreiben>
# Anpassung fuer WLAN, wenn Funkveerbindung nicht aktiv ist
# eigentlich starten nach Link is up/Cable plug in

SCRIPTNAME=`basename "$0"`

IPCHECKSTATE=1

g_debug_enabled=$((0))

PrintDebug()
{
   if [ $g_debug_enabled -gt 0 ]; then
      echo "[DEBUG]:---- $(date) ---- $1"
   fi
}
#--------------
RestartIF()
{
   PrintDebug "restart IF $1, force down $2"
   #NOTE: $1 - Interface, $2 - force ifdown
   if [ -r /var/run/udhcpc.$1.pid ]; then
      kill -9 $(cat /var/run/udhcpc.$1.pid)
   fi
   if [ $2 -eq 1 ]; then
#note ifdown beendet udhcp
      ifdown $1
   fi
   ifup $1
}
#--------------
CheckAdapter()
{
   INTERFACE=$1
   CurrentIP=`ip addr show $INTERFACE |grep "inet " |grep -v 127.0.0. |head -1|cut -d" " -f6|cut -d/ -f1`
   CurrentOperstate=`cat /sys/class/net/$INTERFACE/operstate`
   case "$CurrentOperstate" in
   up)
      CurrentIP=`ip addr show  $INTERFACE |grep "inet " |grep -v 127.0.0. |head -1|cut -d" " -f6|cut -d/ -f1`
      if [ -z "$CurrentIP" ] ; then
         logger -s "$SCRIPTNAME [$INTERFACE] Missing IP -> Restart if(down/up) "
         RestartIF $INTERFACE 1
      else
      # IP ist vorhanden, pruefe WPA status
         /home/cti/shellscripts/network_helper.sh $INTERFACE CheckWPAStatus 2>&1
         ReturnValue=$?
         PrintDebug "IP:  $CurrentIP , state: $CurrentOperstate und online? - > CheckWPAStatus, RetVat: $ReturnValue"
         if [ $ReturnValue -eq 2 ]; then
            PrintDebug "Error:Operation not supported, no wpa for if $INTERFACE -> Ignored "
            return
         fi
         if [ $ReturnValue -eq 1 ]; then
            PrintDebug "Error: [$INTERFACE]CheckWPAStatus -> no connection, drop"
            RestartIF $INTERFACE 1
         fi
         sleep 5
      fi
   ;;
   dormant)
      PrintDebug "[$INTERFACE] dormat State -> ifup"
      # dormant - Funkverbindung ist nicht ok, bzw. AP nicht erreichbar, neu versuchen
      RestartIF $INTERFACE 0
   ;;
   *)
      # hier ist if down, aber wlan aktiv
      PrintDebug " ---- IF not UP || DORMANT <$CurrentOperstate >, mache was... pidof wpa_supplicant: $(cat /var/run/wpa_supplicant.$INTERFACE.pid)"
      if [ -r /var/run/wpa_supplicant.$INTERFACE.pid ]; then
         #   wpa_supplicant ist aktiv
         RestartIF $INTERFACE 1
         sleep 60
      fi
   ;;
   esac
}
#-------------
start()
{
   logger -s "$SCRIPTNAME : DHCP IP Check started"
   sleep 30
   while [ $IPCHECKSTATE -gt 0 ]; do
      # wenn existent und lesbar
      if [ -r /sys/class/net/eth0 ]; then
       CheckAdapter "eth0"
      fi
      if [ -e /home/cti/wireless ]; then
         if [ -r /sys/class/net/wlan0 ]; then
            CheckAdapter "wlan0"
         fi
      fi
# Pruefung  alle 5 Minuten
   sleep 300
   done
}
#-------------
stop()
{
   IPCHECKSTATE=0
}
#-------------
restart()
{
   stop
   start
}
#====================
# main case ...
#====================
case "$1" in
start)
   start
   ;;
stop)
   stop
   ;;
restart)
   restart
   ;;
*)
   echo "Usage: $0 {start | stop | restart }"
   exit 1
esac

exit $?

