#!/bin/bash
#
#
help() {
  echo "Setup network connection using DHCP."
  echo "Specify dhclient, dhcpcd, pump, or udhcpc."
  echo "Example: dhcpup dhclient"
  exit
}

if [ "$1" = "dhclient" ]; then
  dhcp=dhclient
elif [ "$1" = "dhcpcd" ]; then
  dhcp="dhcpcd -t 30"
elif [ "$1" = "pump" ]; then
  dhcp="pump -i"
elif [ "$1" = "udhcpc" ]; then
  dhcp="udhcpc -n -i"
else
  help
fi
  
IF_COUNT=`ifconfig -a | grep -E "^eth|^wlan" | wc -l`

if [ $IF_COUNT -eq 0 ]; then

	echo "No ethernet device found! Skipping dhcp..."

elif [ $IF_COUNT -eq 1 ]; then

	FOUND_IF=`ifconfig -a | grep -E "^eth|^wlan" | awk {'print $1'}`
        
	ifconfig $FOUND_IF up; sleep 1

	LINK_CHK=`ethtool $FOUND_IF | grep "Link detected" | awk {'print $3'}`

	if [ "$LINK_CHK" == "yes" ]; then
         if echo $dhcp | grep -q -w dhcpcd ; then 
            dhcpcd -k $FOUND_IF 1>/dev/null 2>/dev/null && sleep 1
            rm -f /var/run/dhcpcd-$FOUND_IF.pid /var/db/dhcpcd-$FOUND_IF.lease
         fi
		$dhcp $FOUND_IF
        else		
		echo "Found $FOUND_IF but no link..."
	fi

elif [ $IF_COUNT -gt 1 ]; then

	IF_ARRAY=( $(ifconfig -a | grep -E "^eth|^wlan" | awk {'print $1'}) )

	for CURR_INT in "${IF_ARRAY[@]}"
	do
		ifconfig $CURR_INT up; sleep 1
		LINK_CHK=`ethtool $CURR_INT | grep "Link detected" | awk {'print $3'}`

		if [ "$LINK_CHK" == "yes" ]; then
			FOUND_ACTIVE=1
			break
		else
			FOUND_ACTIVE=0
		fi
	done

	if [ "$FOUND_ACTIVE" -eq "0" ]; then
		echo "Did not find any interfaces with an active link..."
	elif [ "$FOUND_ACTIVE" -eq "1" ]; then
         if echo $dhcp | grep -q -w dhcpcd ; then 
            dhcpcd -k $CURR_INT 1>/dev/null 2>/dev/null && sleep 1
            rm -f /var/run/dhcpcd-$CURR_INT.pid /var/db/dhcpcd-$CURR_INT.lease
         fi
                $dhcp $CURR_INT
	fi	
fi
