#!/bin/bash

# Bring up/down dhcpd6

. /etc/sysconfig/rc.conf
. /etc/sysconfig/network.conf
. /bin/network-functions

. /etc/image_features

PIDFILE=/var/run/dhcpd6.pid
PIDFILE_LAN=/var/run/dhcpd6_lan.pid
PIDFILE_VLAN=/var/run/dhcpd6_vlan.pid
SERVICE=dhcpd6
PROCESS_NAME=dhcpd

DHCPD6_CONF_LAN=/var/run/dhcpd6lan.conf
DHCPD6_CONF_VLAN=/var/run/dhcpd6vlan.conf

DHCPD6_LAN_LEASES=/var/state/dhcp/dhcpd6lan.leases
DHCPD6_VLAN_LEASES=/var/state/dhcp/dhcpd6vlan.leases

LOGGER="/bin/logger -t $0"

do_start ()
{
	PIDFILE=$PIDFILE_LAN;
	if ! ServiceCheckRunning1 ; then
		PIDFILE=$PIDFILE_VLAN;
		if ! ServiceCheckRunning1 ; then
			return $?
		fi
	fi

	PIDFILE=/var/run/dhcpd6.pid
	if [ -f /mnt/flashfs/dhcpd6lan.leases ] ; then
		/bin/mv -f /mnt/flashfs/dhcpd6lan.leases /mnt/bbram/state/dhcp/ > /dev/null
	fi
	
	/etc/init.d/softdogd wait
	/bin/touch $DHCPD6_LAN_LEASES

	if [ -f /mnt/flashfs/dhcpd6vlan.leases ] ; then
		/bin/mv -f /mnt/flashfs/dhcpd6vlan.leases /mnt/bbram/state/dhcp/ > /dev/null
	fi
	
	/bin/touch $DHCPD6_VLAN_LEASES

	if [ "$START_DHCPD6_LAN" = "true" ] ; then
		DHCP_LEASE_TIME=$(cat /etc/fiad-conf/dhcpd6.conf.lan | grep dhcp-lease-time | tr -dc '0-9')
		/bin/cp -f /etc/dhcpd6.conf.mgmt $DHCPD6_CONF_LAN > /dev/null
		if [ "$DHCP_LEASE_TIME" != "" ]; then
			sed -i "s/604800/$DHCP_LEASE_TIME/g" $DHCPD6_CONF_LAN
		fi

		DHCPD6_INTERFACE="lan0"
  		cat /etc/fiad-conf/dhcpd6.conf.lan >> $DHCPD6_CONF_LAN
	fi


	if [ "$DHCPD6_INTERFACE" != "" ] ; then
		/bin/setsid /bin/$PROCESS_NAME -6 -q -cf $DHCPD6_CONF_LAN $DHCPD6_INTERFACE -lf $DHCPD6_LAN_LEASES > /dev/null 2>&1
		ServiceCheckRunning2
		mv /var/run/dhcpd6.pid $PIDFILE_LAN
	fi

	if [ "$FEATURE_VLAN" = "1" ] && [ "$START_DHCPD6_VLAN" = "true" ] ; then
		DHCP_LEASE_TIME=$(cat /etc/fiad-conf/dhcpd6.conf.vlan$DHCPD_VLAN_ID | grep dhcp-lease-time | tr -dc '0-9')
		/bin/cp -f /etc/dhcpd6.conf.mgmt $DHCPD6_CONF_VLAN > /dev/null
		if [ "$DHCP_LEASE_TIME" != "" ]; then
			sed -i "s/604800/$DHCP_LEASE_TIME/g" $DHCPD_CONF_VLAN
		fi
		if [ "$DHCPD6_VLAN_INTERFACE" = "0" ] ; then
			DHCPD6_INTERFACE="lan$DHCPD6_VLAN_INTERFACE.$DHCPD_VLAN_ID"
		else
			DHCPD6_INTERFACE="wan0.$DHCPD_VLAN_ID"
		fi
		ACTUAL_VLAN_INTERFACE=`/sbin/ifconfig | grep $DHCPD6_INTERFACE`
		if [ "$ACTUAL_VLAN_INTERFACE" != "" ] ; then
			cat /etc/fiad-conf/dhcpd6.conf.vlan$DHCPD_VLAN_ID >> $DHCPD_CONF_VLAN

			/bin/setsid /bin/$PROCESS_NAME -6 -q -cf $DHCPD6_CONF_VLAN $DHCPD6_INTERFACE -lf $DHCPD6_VLAN_LEASES > /dev/null 2>&1
			ServiceCheckRunning2
			mv /var/run/dhcpd6.pid $PIDFILE_VLAN
		fi
	fi

	return $?
}

do_stop ()
{
	PIDFILE=$PIDFILE_LAN;
	ServiceStop

	PIDFILE=$PIDFILE_VLAN;
	ServiceStop

	/etc/init.d/softdogd wait

	rm -f $DHCPD6_CONF_LAN
	rm -f $DHCPD6_CONF_VLAN

	if [ -f /mnt/bbram/state/dhcp/dhcpd6lan.leases ] ; then
		/bin/cp -f /mnt/bbram/state/dhcp/dhcpd6lan.leases /mnt/flashfs/  > /dev/null
	fi

	if [ -f /mnt/bbram/state/dhcp/dhcpd6vlan.leases ] ; then
		/bin/cp -f /mnt/bbram/state/dhcp/dhcpd6vlan.leases /mnt/flashfs/  > /dev/null
	fi


	return $?
}

do_status ()
{
	local RESULT=0;
	
	if [ "$START_DHCPD6_LAN" = "true" ] ; then
		PIDFILE=$PIDFILE_LAN;
		ServiceStatus
		RESULT=$?
		if [ $RESULT != 0 ] ; then
		    return $RESULT
		fi
	fi

	if [ "$FEATURE_VLAN" = "1" ] && [ "$START_DHCPD6_VLAN" = "true" ] ; then
		PIDFILE=$PIDFILE_VLAN;
		ServiceStatus
		RESULT=$?
	fi

	return $RESULT
}

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

exit $?
