#!/bin/sh
#
# XBian dhcp script for udhcpc client
# based on busybox examples/udhcp/simple.script
#
# udhcpc script edited by Tim Riker <Tim@Rikers.org>
#

[ -n "$1" ] || { echo "Error: should be called from udhcpc"; exit 1; }

if [ "$(awk -Floglevel= '{printf "%d", $2}' /proc/cmdline)" -gt 0 ]; then
	echo "------------------------------------" >> /run/xbian-dhcp.log
	echo "$(date "+%b %d %T:") $@" >> /run/xbian-dhcp.log
	echo "------------------------------------" >> /run/xbian-dhcp.log
	env | grep -E ^"(subnet|router|domain|interface|siaddr|dns|serverid|boot_file|broadcast|ip|mask|ntpsrv|opt|search)" | sort >> /run/xbian-dhcp.log
fi

RESOLV_CONF="/etc/resolv.conf"
NETMASK=""
if command -v ip >/dev/null; then
	[ -n "$subnet" ] && NETMASK="/$subnet"
else
	[ -n "$subnet" ] && NETMASK="netmask $subnet"
fi
BROADCAST="broadcast +"
[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"

case "$1" in
	deconfig)
		echo "Deconfiguring $interface"
		if command -v ip >/dev/null; then
			ip link set dev $interface up
			ip addr flush dev $interface
		else
			ifconfig $interface up
			ifconfig $interface 0.0.0.0
		fi
		;;

	renew|bound)
		echo "Setting IP address $ip on $interface"
		if command -v ip >/dev/null; then
			ip addr add $ip$NETMASK $BROADCAST dev $interface
		else
			ifconfig $interface $ip $NETMASK $BROADCAST
		fi

		if [ -n "$router" ] ; then
			echo "Deleting routers"
			while route del default gw 0.0.0.0 dev $interface 2>/dev/null; do
				:
			done

			metric=0
			for i in $router ; do
				echo "Adding router $i"
				if [ "$subnet" = "255.255.255.255" ]; then
	# special case for /32 subnets:
	# /32 instructs kernel to always use routing for all outgoing packets
	# (they can never be sent to local subnet - there is no local subnet for /32).
	# Used in datacenters, avoids the need for private ip-addresses between two hops.
					ip route add $i dev $interface
				fi
				route add default gw $i dev $interface metric $metric
				metric=$((metric+1))
			done
		fi

		echo "Recreating $RESOLV_CONF"
		# If the file is a symlink somewhere (like /etc/resolv.conf
		# pointing to /run/resolv.conf), make sure things work.
		realconf=$(readlink -f "$RESOLV_CONF" 2>/dev/null || echo "$RESOLV_CONF")
		tmpfile="$realconf-$$"
		> "$tmpfile"
		if [ -n "$domain" ]; then
		    echo "domain $domain" >> "$tmpfile"
		    [ -z "$search" ] && echo "search $domain" >> "$tmpfile"
		fi
		[ -n "$search" ] && echo "search $search" >> "$tmpfile"
		for i in $dns ; do
			echo " Adding DNS server $i"
			echo "nameserver $i" >> "$tmpfile"
		done
		mv "$tmpfile" "$realconf"
		;;
esac

exit 0
