#!/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_LAN0=/var/run/dhcpd6_lan0.pid
PIDFILE_LAN1=/var/run/dhcpd6_lan1.pid
PIDFILE_VLAN=/var/run/dhcpd6_vlan.pid
SERVICE=dhcpd6
PROCESS_NAME=dhcpd

DHCPD6_CONF_LAN0=/var/run/dhcpd6lan0.conf
DHCPD6_CONF_LAN1=/var/run/dhcpd6lan1.conf
DHCPD6_CONF_VLAN=/var/run/dhcpd6vlan.conf

DHCPD6_LAN0_LEASES=/var/state/dhcp/dhcpd6lan0.leases
DHCPD6_LAN1_LEASES=/var/state/dhcp/dhcpd6lan1.leases
DHCPD6_VLAN_LEASES=/var/state/dhcp/dhcpd6vlan.leases

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

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

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

	if [ -f /mnt/flashfs/dhcpdlan1.leases ] ; then
		/bin/mv -f /mnt/flashfs/dhcpdlan1.leases /mnt/bbram/state/dhcp/ > /dev/null
	fi
	
	/bin/touch $DHCPD_LAN1_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_LAN0 > /dev/null
		if [ "$DHCP_LEASE_TIME" != "" ]; then
			sed -i "s/604800/$DHCP_LEASE_TIME/g" $DHCPD6_CONF_LAN0
		fi

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


	if [ "$DHCPD6_INTERFACE" != "" ] ; then
		/bin/setsid /bin/$PROCESS_NAME -6 -q -cf $DHCPD6_CONF_LAN0 $DHCPD6_INTERFACE -lf $DHCPD6_LAN0_LEASES > /dev/null 2>&1
		ServiceCheckRunning2
		mv /var/run/dhcpd6.pid $PIDFILE_LAN0
	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_LAN0;
	ServiceStop

	PIDFILE=$PIDFILE_LAN1;
	ServiceStop

	PIDFILE=$PIDFILE_VLAN;
	ServiceStop

	/etc/init.d/softdogd wait

	rm -f $DHCPD6_CONF_LAN0
	rm -f $DHCPD6_CONF_LAN1
	rm -f $DHCPD6_CONF_VLAN

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

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


	return $?
}

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

	if [ "$START_DHCPD6_SECOND_LAN" = "true" ] ; then
		PIDFILE=$PIDFILE_LAN1;
		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 $?
