#!/bin/bash



###############################
###############################
#
# Display help text
#
###############################
###############################

helptext() {

	echo ""
	echo "------------------------------------------------"
	echo " Script to test network configuration settings "
	echo " on a system."
	echo ""
	echo " -h             Display help text (this text)"
	echo " -d <target>    Defines device that is going "
	echo "                to be tested. Output will be "
        echo "                written to a file with the "
        echo "                device name."
#	echo " With parameter -o <target> output can be re- "
#	echo " directed from stdout to <target> file."
	echo "------------------------------------------------"

	exit 0
}

###############################
###############################
#
# Initial configuration of script behaviour
#
##############################
##############################

while getopts "o:hd:" OPTIONS
do
	case $OPTIONS in
	o)
	TARGETFILE=$OPTARG
	OUTPUTTOFILE=1;;
	h)
	helptext;;
        d)
        TARGETDEVICE=$OPTARG;;
	esac
done


#TARGETDEVICE="eth0"

TARGETFILE=nw-test-$TARGETDEVICE



#TARGETFILE="eth0"
#typeset -i OUTPUTTOFILE
#if  (( OUTPUTTOFILE == 1 ))
#then

	if [ -f "$TARGETFILE"  ]
	then 
		> $TARGETFILE
	fi
	exec 1>$TARGETFILE

#fi



#echo $OUTPUTTOFILE 
#echo $TARGETFILE


#echo $COUNTER

######################
######################
#
# Detection available network devices
#
#####################
#####################


	echo
	echo ------------------------
	echo Testing for link of found devices  
	echo ------------------------

COUNTER=0
STRING=0

        STRING=$( cat /sys/class/net/$TARGETDEVICE/carrier )
#	STRING=$( ethtool $TARGETDEVICE | sed -n 's/Link\ detected\:\ yes/yes/p' )
	if [[ "$STRING" -eq "1"   ]]
	then
		COUNTER=$(($COUNTER + 1))
		echo Testing device $TARGETDEVICE:    Link detected
	else
		echo Testing device $TARGETDEVICE:    Link no  detected
	fi
echo



#####################
#####################
#
#  Test availables  gateways
#
####################
####################

	echo
	echo ------------------------
	echo Testing for available gateways
	echo ------------------------

COUNTER=0
GATEWAYNUMBER=0
STRING=""


        STRING=$( cat /etc/sysconfig/network/routes | grep $TARGETDEVICE | awk -F' ' '{print $2}'  )
#	echo $STRING
        GATEWAYNUMBER=1
#	STRING=$( dhcpcd-test $TARGETDEVICE | grep GATEWAYS | awk -F\' '{print $2}' )
#	GATEWAYNUMBER=$( echo $STRING | awk -F' ' '{print NF}' )

	echo Gateway detected: $STRING  



	
#	for (( j=1; j <= GATEWAYNUMBER; j++ ))
#	do
#		GATEWAYARRAY[$j]=$( echo $STRING | awk -F' ' '{print '\$$j'}' )

#		echo Device: $TARGETDEVICE   Gateway Entry:  $TARGETDEVICE 

		COUNTER=$( ping -c 1 $STRING | grep icmp | wc -l )
		if [ $COUNTER -eq 1  ]
		then
			echo Gateway entry of $TARGETDEVICE responds to ping
#			COUNTER=0
		else
			echo Gateway entry of $TARGETDEVICE doesn\'t  answer pings
		fi
#	done	



#####################
#####################
#
#  Test availables  DNS servers
#
####################
####################

	echo
	echo ------------------------
	echo Testing for available DNS servers
	echo ------------------------

COUNTER=0
DIGCOUNTER=0
TELNETCOUNTER=0
DNSNUMBER=0
STRING=""


        STRING=$( cat /etc/resolv.conf | grep nameserver | grep -v \# | awk -F' ' '{print $2}' )
#	STRING=$( dhcpcd-test $TARGETDEVICE | grep DNSSERVERS | awk -F\' '{print $2}' )
	DNSNUMBER=$( cat /etc/resolv.conf | grep nameserver | grep -v \# | wc -l  )

	echo DNS string:  $STRING Number of entries: $DNSNUMBER

	for (( j=1; j <= DNSNUMBER; j++ ))
	do
		DNSARRAY[$j]=$( echo $STRING | awk -F' ' '{print '\$$j'}' )

		echo  Device: $TARGETDEVICE    DNS Entry:  ${DNSARRAY[$j]}    

		COUNTER=$( ping -c 1 ${DNSARRAY[$j]} | grep -c  icmp  )
		DIGCOUNTER=$( dig \@${DNSARRAY[$j]} ${DNSARRAY[$j]}  | grep "Got answer" | wc -l )
		TELNETCOUNTER=$( (echo Q ) | telnet -e Q ${DNSARRAY[$j]} 53 | grep -c Connected  )

		if [ $COUNTER -eq 1  ]
		then
			echo DNS Entry ${DNSARRAY[$j]} responds to ping
			COUNTER=0
		else
			echo DNS Entry ${DNSARRAY[$j]} doesn\'t  answer pings 
		fi

		if [ $DIGCOUNTER -eq 1  ]
		then
			echo DNS Entry ${DNSARRAY[$j]} \"Got answer\" via dig
			DIGCOUNTER=0
		else
			echo DNS Entry ${DNSARRAY[$j]} hasn\'t \"Got answer\" via dig
		fi



		if [ $TELNETCOUNTER -eq 1  ]
		then
			echo DNS Entry ${DNSARRAY[$j]}:53 \"Connected\" via telnet
			TELNETCOUNTER=0
		else
			echo DNS Entry ${DNSARRAY[$j]}:53 hasn\'t \"Connected\" via telnet
		fi
	done	




#####################
#####################
#
#  Test if predefined ip adress and current ip address match
#
####################
####################


echo
echo ------------------------
echo Testing if IPADDR entry in device config file and current ip address match
echo ------------------------
echo currently disabled test, as config file not readable as user
echo makes IP Adress known to the script
echo ---------------------------------
IFCFGSTRING=""
IPADDRSTRING=""

     IPADDRSTRING=$( ip addr show | grep $TARGETDEVICE | grep 'inet ' | awk -F' ' '{print $2}' | awk -F'/' '{print $1}' )


#	IFCFGSTRING=$( grep -i ipaddr /etc/sysconfig/network/ifcfg-$TARGETDEVICE | awk -F\' '{print $2}' | awk -F/ '{print $1}' )
#	echo $IFCFGSTRING

#	IPADDRSTRING=$( dhcpcd-test $TARGETDEVICE | grep IPADDR | awk -F\' '{print $2}'   )
	echo $IPADDRSTRING

#	if [ "$IFCFGSTRING" = "$IPADDRSTRING" ] 
#	then
#		echo Device $TARGETDEVICE: IP Address $IPADDRSTRING matching
#	else
#		echo Device $TARGETDEVICE: IP Address not matching
#	fi


#####################
#####################
#
#  Test if ip adress is used by only this host
#
####################
####################

echo
echo ------------------------
echo Testing for packet loss of Ping to own address - could be a sign for a address duplication in network
echo ------------------------

PACKETLOSS=""

for (( i = 0; i < 10; i++))
do
PACKETLOSS=$( ping -c 1 $IPADDRSTRING | grep "packet loss" | awk -F',' '{print $3}' | awk -F'%' '{print $1}')
echo -n .
done

echo 

if [ "$PACKETLOSS" -gt "1" ]
then
	echo Packet loss greater than 10%.
	echo Current IP address could be in use by another machine too
else
	echo Packet loss less or equal 10 %
fi



#####################
#####################
#
#  Test for dhcp offer/current ip address
#
####################
####################

echo
echo ------------------------
echo  Test  matching of dhcp offered ip adress and system ip adress
echo ------------------------
echo not yet implemented for user, root privileges are needed

IPOFFERED=""
# IPADDRSTRING taken from test above, predfined/current ip address



#	IPOFFERED=$( dhcpcd-test $TARGETDEVICE | grep offered | awk -F' ' '{print $4}' )
#	echo $IPOFFERED
#	if [ "$IPOFFERED" = "$IPADDRSTRING" ]
#	then
#		echo IP addresses do match
#	else
#		echo IP addresses do not match 
#	fi

exit
#####################
#####################
#
#  Test host name reseloves
#
####################
####################
echo
echo ------------------------
echo  Test host name resolve
echo ------------------------

HOSTNAME=""
DOMAINNAME=""
RESOLVEFROMIP=""
RESOLVESTRING=""

HOSTNAME=$(hostname )
DOMAINNAME=$(domainname)
RESOLVESTRING=$HOSTNAME.$DOMAINNAME.

RESOLVEFROMIP=$( host $IPADDRSTRING | awk -F' ' '{print $5 }' )

if [ "$RESOLVESTRING" == "$RESOLVEFROMIP"   ] 
then
	echo Host name and resolved host name matching
 else
	echo Host name and resolved host name do not match
 fi

