From 9e108114f9e5b6de91d7605f780c3a25382e032a Mon Sep 17 00:00:00 2001 From: ExploWare Date: Wed, 19 Mar 2014 12:48:15 +0100 Subject: [PATCH] Added IPv6, ESSID check, Silent mode, Wired switch IPv6 support (ifconfig returns inet6 addr) ESSID check, on static configuration, inet(6) addr will be set even when not connected to AP Silent mode, prevent crontab log to grow huge in no-time (reduces writing for sdcards as well) Wired switch, to make only one network connection available at a time --- WiFi_Check | 100 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 71 insertions(+), 29 deletions(-) diff --git a/WiFi_Check b/WiFi_Check index 9de6f91..641ca3a 100644 --- a/WiFi_Check +++ b/WiFi_Check @@ -5,6 +5,9 @@ # Title: WiFi_Check # Author: Kevin Reed (Dweeber) # dweeber.dweebs@gmail.com +# Enhanced by: +# Youp Mol +# wifi_check @ youp.nospam.net # Project: Raspberry Pi Stuff # # Copyright: Copyright (c) 2012 Kevin Reed @@ -18,6 +21,9 @@ # Uses a lock file which prevents the script from running more # than one at a time. If lockfile is old, it removes it # +# Enhancements added: +# IPv6 capability, static configuration support, silent-mode, switching off wired interface +# # Instructions: # # o Install where you want to run it from like /usr/local/bin @@ -28,7 +34,7 @@ # this is a very common problem. If once a min change */5 to * # once every 2 mins */5 to */2 ... # -# */5 * * * * /usr/local/bin/WiFi_Check +# */5 * * * * /usr/local/bin/WiFi_Check silent # ################################################################## # Settings @@ -36,51 +42,87 @@ lockfile='/var/run/WiFi_Check.pid' # Which Interface do you want to check/fix wlan='wlan0' +wired='eth0' ################################################################## -echo -echo "Starting WiFi check for $wlan" -date -echo +$silent || echo -n "Starting WiFi check for $wlan" # Check to see if there is a lock file if [ -e $lockfile ]; then - # A lockfile exists... Lets check to see if it is still valid - pid=`cat $lockfile` - if kill -0 &>1 > /dev/null $pid; then - # Still Valid... lets let it be... - #echo "Process still running, Lockfile valid" - exit 1 - else - # Old Lockfile, Remove it - #echo "Old lockfile, Removing Lockfile" - rm $lockfile - fi + # A lockfile exists... Lets check to see if it is still valid + pid=`cat $lockfile` + if kill -0 &>1 > /dev/null $pid; then + # Still Valid... lets let it be... + #echo "Process still running, Lockfile valid" + $silent || echo -n . + exit 1 + else + # Old Lockfile, Remove it + #echo "Old lockfile, Removing Lockfile" + $silent || echo -n . + rm $lockfile + sleep .5 + fi +else + $silent || echo -n . fi # If we get here, set a lock file using our current PID# #echo "Setting Lockfile" +$silent || echo -n . echo $$ > $lockfile # We can perform check -echo "Performing Network check for $wlan" -if ifconfig $wlan | grep -q "inet addr:" ; then - echo "Network is Okay" +#echo "Performing Network check for $wlan" +if iwconfig $wlan|grep -qe "ESSID:\".*\""; then + #echo ESSID found + $silent || echo -n . + if ifconfig $wlan | grep -q "inet addr:" ; then + #echo "Network is Okay" + $silent || echo . OK + logger Wifi connection on $wlan is OK + ifdown $wired 2&>1 > /dev/null + elif ifconfig $wlan | grep -q "inet6 addr:" ; then + #echo "Network \(IPv6 only\) is Okay" + $silent || echo . OK + logger Wifi connection on $wlan \(IPv6 only\) is OK + ifdown $wired 2&>1 > /dev/null + else + $silent || echo "Network connection down! Attempting reconnection." + logger Wifi connection on $wlan is DOWN, trying to reconnect... + date + ifdown $wlan + sleep 5 + ifup --force $wlan + if ifconfig $wlan | grep -q "inet addr:" ; then + logger Wifi connection on $wlan seems to be up and running again. + ifdown $wired 2&>1 > /dev/null + else + logger Wifi connection on $wlan is DOWN, enabling the wired connection... + ifup $wired 2&>1 > /dev/null + fi + fi else - echo "Network connection down! Attempting reconnection." - ifdown $wlan - sleep 5 - ifup --force $wlan - ifconfig $wlan | grep "inet addr" + $silent || echo "Network connection down! Attempting reconnection." + logger Wifi connection on $wlan is DOWN, trying to reconnect... + date + ifdown $wlan + sleep 5 + ifup --force $wlan + if ifconfig $wlan | grep -q "inet addr:" ; then + logger Wifi connection on $wlan seems to be up and running again. + ifdown $wired 2&>1 > /dev/null + else + logger Wifi connection on $wlan is DOWN, enabling the wired connection... + ifup $wired 2&>1 > /dev/null + fi fi -echo -echo "Current Setting:" -ifconfig $wlan | grep "inet addr:" -echo +$silent || echo -n "Current Setting:" +$silent || iwconfig $wlan | grep -zoe "ESSID:\".*\""|xargs echo -e|tr -d \\n\\t;ifconfig $wlan | grep -oe "addr:[a-zA-Z0-9.:]*" + # Check is complete, Remove Lock file and exit #echo "process is complete, removing lockfile" rm $lockfile -exit 0 ################################################################## # End of Script