#!/bin/bash

# Bring up/down dhcp client IPv6

. /proc/fiad/hw-info
. /etc/sysconfig/rc.conf
. /etc/sysconfig/network.conf
. /bin/network-functions
. /var/run/interfaces
. /etc/image_features

PIDFILE=/var/run/dhclient6.pid
SERVICE=dhclient6
PROCESS_NAME=dhclient

INITDPID=/var/run/initd."$SERVICE".pid
DHCLIENT_LEASED6=/var/state/dhcp/dhclient6.leases
CONFIG6=/var/run/dhclient6.conf

do_start6 ()
{
	if ! ServiceCheckRunning1 ; then
		return $?
	fi

	/etc/init.d/softdogd wait
	echo "$$" > $INITDPID

	WAN_MAC=$(/bin/ip link show dev $PHYS_WAN | /bin/grep ether | /bin/cut -d ' ' -f 6)

	# create correct dhclient configuration
	echo "# dhclient6.conf. Automatically created: `date`" > $CONFIG6
	echo "send host-name \"$HOSTNAME\";" >> $CONFIG6
	echo "send dhcp-client-identifier \"$WAN_MAC\";" >> $CONFIG6
	echo "send vendor-class-identifier \"$WAN_MAC $BOARD_TYPE $(/bin/cat /etc/image_label.txt)\";" >> $CONFIG6
	echo "request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, host-name, tftp-server-name;" >> $CONFIG6
	echo "option classless-static-routes code 121 = array of { integer 8, ip-address, ip-address };" >> $CONFIG6
	echo "timeout 10;" >> $CONFIG6
	echo "retry 60;" >> $CONFIG6

	PHYS_INTERFACE=$PHYS_WAN
	# if [ "$FEATURE_VLAN" = "1" ] ; then 
	#	if [ "$START_VLANGW" = "true" ] ; then
	#		PHYS_INTERFACE=$VLAN_INTERFACE
	#	fi
	# fi

	/bin/setsid /bin/$PROCESS_NAME -6 $PHYS_INTERFACE -lf $DHCLIENT_LEASED6 -pf $PIDFILE &

	rm -f $INITDPID

	ServiceCheckRunning2

	return $?
}

do_stop6 ()
{
	if ! ServiceStop ; then
		return $?
	fi
	/etc/init.d/softdogd wait

	# killing dhclient is not enough.. we need to stop all dependant services
	. /var/run/interfaces
	export interface=$PHYS_WAN
	export reason=STOP6
	/sbin/dhclient-script

	# disable interface
	#/bin/ip -6 address flush dev $PHYS_WAN > /dev/null 2>&1
	#/bin/ip link set down dev $PHYS_WAN > /dev/null 2>&1

	return $?
}

do_status ()
{
	ServiceStatus

	return $?
}


case "$1" in
	start)
		do_start6
		;;
	stop)
		do_stop6
		;;
	status)
		do_status
		;;
	restart)
		do_stop6
		do_start6
		;;
	*)
		echo "Usage: $0 {start|stop|restart|status}"
		exit 1
esac

exit $?
