#!/bin/sh

# customized info for different package
PACKAGE_NAME=$SYNOPKG_PKGNAME
PACKAGE_VER=$SYNOPKG_PKGVER
PACKAGE_ERR_MSG=$SYNOPKG_TEMP_LOGFILE
UPGRAGE_FILE="/tmp/synodhcp.upgrade"
TMP_INFO="/tmp/dhcpd-info"
DHCP_PKG_ETC="/var/packages/DHCPServer/target/etc"

OLD_STATIC="/etc/dhcpd/dhcpd-static.conf"
BAK_STATIC="/etc/dhcpd/dhcpd-static.bak"
NEW_STATIC="/etc/dhcpd/dhcpdStatic.ori"

# general routine
NEW_PACKAGE_VER=`get_key_value "${SYNOPKG_PKGINST_TEMP_DIR}/../INFO" "version"`
OLD_PACKAGE_VER=$PACKAGE_VER

RESERVED_INFO_TEMPLATE="/tmp/synodhcp_reserved_info_template"

create_reserved_info_template()
{
	echo "dhcp-option=tag:static,option:dns-server,127.0.0.1" > ${RESERVED_INFO_TEMPLATE}
	echo "dhcp-option=tag:static,option:router,127.0.0.1" >> ${RESERVED_INFO_TEMPLATE}
	echo "interface=static" >> ${RESERVED_INFO_TEMPLATE}
	echo "dhcp-range=set:static,127.0.0.1,127.0.0.1,255.255.255.0,86400" >> ${RESERVED_INFO_TEMPLATE}
}

check_version_older() # $1 base version $2 target version
{
	BASE_VER=$1
	TARGET_VER=$2

	# if no base ver, always reture false
	if [ -z "${BASE_VER}" ]; then
		return 0;
	fi

	# getting major, minor, build
	base_major=`echo ${BASE_VER} | sed 's/^\([0-9]*\)[.-]\([0-9]*\)[.-]\([0-9]*\).*/\1/'`
	base_minor=`echo ${BASE_VER} | sed 's/^\([0-9]*\)[.-]\([0-9]*\)[.-]\([0-9]*\).*/\2/'`
	base_build=`echo ${BASE_VER} | sed 's/^\([0-9]*\)[.-]\([0-9]*\)[.-]\([0-9]*\).*/\3/'`
	target_major=`echo ${TARGET_VER} | sed 's/^\([0-9]*\)[.-]\([0-9]*\)[.-]\([0-9]*\).*/\1/'`
	target_minor=`echo ${TARGET_VER} | sed 's/^\([0-9]*\)[.-]\([0-9]*\)[.-]\([0-9]*\).*/\2/'`
	target_build=`echo ${TARGET_VER} | sed 's/^\([0-9]*\)[.-]\([0-9]*\)[.-]\([0-9]*\).*/\3/'`

	# compare major, version must equal or above limitation
	if [ $target_major -lt $base_major ]; then
		return 1;
	elif [ $target_major -gt $base_major ]; then
		return 0;
	fi
	# compare minor
	if [ $target_minor -lt $base_minor ]; then
		return 1;
	elif [ $target_minor -gt $base_minor ]; then
		return 0;
	fi
	# compare build
	if [ $target_build -lt $base_build ]; then
		return 1;
	else
		return 0;
	fi
}

check_version_older ${OLD_PACKAGE_VER} ${NEW_PACKAGE_VER}
if [ $? -eq "1" ]; then
	echo "Target version [${NEW_PACKAGE_VER}] is older than current [${OLD_PACKAGE_VER}], abort"
	echo "Package version (${NEW_PACKAGE_VER}) is older then installed (${OLD_PACKAGE_VER})." > $PACKAGE_ERR_MSG
	exit 1;
fi

touch ${UPGRAGE_FILE}
OLD_VER_STR="old_version="${OLD_PACKAGE_VER}
echo ${OLD_VER_STR} >> ${UPGRAGE_FILE}
mkdir ${TMP_INFO}
for info_file in `ls ${DHCP_PKG_ETC}/dhcpd*.info | grep -v lbr0 | grep -v dhcpd.info`; do
	mv ${info_file} ${TMP_INFO}
done

cp "${OLD_STATIC}" "${NEW_STATIC}"
mv "${OLD_STATIC}" "${OLD_STATIC}.bak"

create_reserved_info_template
cat ${RESERVED_INFO_TEMPLATE} ${NEW_STATIC} > /etc/dhcpd/dhcpd-static-static.conf
echo "enable=\"yes\"" > /etc/dhcpd/dhcpd-static-static.info

exit 0
