#!/bin/bash


# vserver helper functions to deal with DHCP


_dhcp_set_file_variables(){
	IPDEV=$1
	VSERVER=$2
	SUFFIX=$3

	DHCP_INFO_FILE="/var/run/vservers/$VSERVER$SUFFIX.dhcp"
	DHCP_PID_FILE="/var/run/dhclient-$IPDEV:$VSERVER$SUFFIX.pid"
	DHCP_LEASE_FILE="/var/lib/dhcp/dhclient-$IPDEV:$VSERVER$SUFFIX.leases"
	DHCP_CONFIG_FILE="/var/lib/dhcp/dhclient-$IPDEV:$VSERVER$SUFFIX.conf"
	DHCP_SCRIPT_FILE="$USR_LIB_VSERVER/dhclient-script"
}


_dhcp_kill_dhclient(){
	IPDEV=$1
	VSERVER=$2
	SUFFIX=$3
	SIGNAL=$4

	_dhcp_set_file_variables $IPDEV $VSERVER $SUFFIX
	if [ -f "$DHCP_PID_FILE" ]; then
		kill $SIGNAL `cat $DHCP_PID_FILE` >/dev/null 2>&1
		return $?
	fi
	return 1
}


_dhcp_create_info_file(){
	IPDEV=$1
	VSERVER=$2
	SUFFIX=$3

	_dhcp_set_file_variables $IPDEV $VSERVER $SUFFIX
	echo "DHCP_IP=\"$new_ip_address\"" > $DHCP_INFO_FILE
	echo "DHCP_MASK=\"$new_subnet_mask\"" >> $DHCP_INFO_FILE
	echo "DHCP_BCAST=\"$new_broadcast_address\"" >> $DHCP_INFO_FILE
	echo "DHCP_DNS=\"$new_domain_name_servers\"" >> $DHCP_INFO_FILE
}


dhcp_acquire_ip(){
	IPDEV=$1
	VSERVER=$2
	S_HOSTNAME=$3
	SUFFIX=$4

	if ! _dhcp_kill_dhclient $IPDEV $VSERVER "$SUFFIX" "-0" ; then
		# dhcclient is not running for this vserver
		_dhcp_set_file_variables $IPDEV $VSERVER $SUFFIX
		echo "send dhcp-client-identifier \"vserver $VSERVER$SUFFIX\";" > $DHCP_CONFIG_FILE
		if [ "$SUFFIX" = "" ] ; then
			echo "send host-name \"$S_HOSTNAME\";" >> $DHCP_CONFIG_FILE
		fi
		rm -f $DHCP_INFO_FILE
		/sbin/dhclient -1 -q -cf $DHCP_CONFIG_FILE -lf $DHCP_LEASE_FILE \
			-pf $DHCP_PID_FILE -sf $DHCP_SCRIPT_FILE $IPDEV \
			-e VSERVER=$VSERVER -e SUFFIX=$SUFFIX
	fi

	if [ -f $DHCP_INFO_FILE ] ; then
		source $DHCP_INFO_FILE
	else
		echo "Can't find DHCP information file '$DHCP_INFO_FILE'." >&2
		echo "Lease could not be acquired or has expired/changed." >&2
		exit 1
	fi
}


dhcp_relinquish_ip(){
	IPDEV=$1
	VSERVER=$2
	SUFFIX=$3

	_dhcp_kill_dhclient $IPDEV $VSERVER $SUFFIX
	rm -f $DHCP_INFO_FILE
}


dhcp_fix_iproot_entry(){
	IPDEV=$1
	VSERVER=$2
	SUFFIX=$3
}

