#!/bin/sh
#
# Start the network....
#

me=[S16network]

# For init the caller will be /etc/init.d/rcS.
# In this case we don't want to start OpenVPN.
# In all other cases we expect to be in running state and e.g. devicestack
# called this script due to changed IP settings and we are thus in need to
# start OpenVPN again if enabled.
CALLER=$(ps | grep "^ *$PPID" | awk '{print $NF}')

# Load ipmodule variables
. /opt/gira/share/devicestack/ipmodule-vars

MAX_LOG_SIZE=1000000	# 1M

if [ -e ${NETLOG} ]
then
	LOGSIZE=`ls -la ${NETLOG} | awk '{ print $5}'`
	if [ ${LOGSIZE} -gt ${MAX_LOG_SIZE} ]
	then
		rm -f ${NETLOG}
	fi
fi

touch ${NETLOG}

IFACE=eth0
[ -f ${OPENVPN_ENABLED_FILE} ] && IFACE=br0

use_dhcp()
{
	${IPC_SEND} netcfg-requesting-dhcp-address
	udhcpc -x hostname:"${HOSTNAME}" -b -s ${DHCP_SCRIPT} -i ${IFACE} >> ${NETLOG}
}

# configure static network
use_static()
{
	ifconfig ${IFACE} ${IP} netmask ${NETMASK} >> ${NETLOG}
	route add -net 224.0.0.0 netmask 240.0.0.0 ${IFACE}
	route del default 2> /dev/null
	if [ ! -z ${GATEWAY} ] && [ ! _${GATEWAY} = _0.0.0.0 ]
	then
		route add default gw ${GATEWAY}
	fi

	# set nameserver 1
	if [ ! -z "${NAMESERVER1}" ]
	then
		printf "nameserver %s\\n" "${NAMESERVER1}" >> ${RESOLV_CONF}
	fi

	# set nameserver 2
	if [ ! -z "${NAMESERVER2}" ]
	then
		printf "nameserver %s\\n" "${NAMESERVER2}" >> ${RESOLV_CONF}
	fi

	${IPC_SEND} netcfg-static-address-configured
}

start() {
	printf "%s Starting network ... " "${me}"
	printf "Starting network ... \\n" >> ${NETLOG}

	# prepare
	touch ${RESOLV_CONF}
	rm -f ${SERVER_ID}
	if [ ! -f ${NETWORK_CFG_FILE} ]
	then
		printf "%s %s not found copying template.\\n" "${me}" "${NETWORK_CFG_FILE}"
		cp ${NETWORK_CFG_FILE_TEMPLATE} ${NETWORK_CFG_FILE}
	fi

	# read config file
	. ${NETWORK_CFG_FILE}

	# set new hostname
	MAC=$(cat /opt/extparam/mac_address_0 | sed 's/://g' | tr '[:upper:]' '[:lower:]') 
	DEVICEID=$(cat /opt/extparam/device_id)
	HOSTNAME="${DEVICEID}-${MAC}" 
	log "Setting hostname to ${HOSTNAME}"
	hostname ${HOSTNAME}

	# init eth0
	ifconfig eth0 up >> ${NETLOG}

	# clean up processes
	killall -q udhcpc
	killall -q zcip

	if [ -f ${OPENVPN_ENABLED_FILE} ]
	then
		printf "%s OpenVPN enabled.\\n" "${me}"
		printf "%s Starting eth0 bridge as OpenVPN is enabled!\\n" "${me}"
		/opt/gira/bin/start-bridge.sh
	else
		printf "No OpenVPN enabled! Normal networking.\\n"
	fi

	# check dhcp mode
	if [ _${MODE} = _DHCP ]
	then
		use_dhcp
    printf "Starting Network done.\\n" >> ${NETLOG}
    exit 0
	fi

	use_static

	[ "${CALLER}" = "/etc/init.d/rcS" ] && return
	/etc/init.d/S60openvpn start

	printf "done.\\n"
	printf "Starting Network done.\\n" >> ${NETLOG}
}

stop() {
	printf "Stopping network ... \\n"
	printf "Stopping network ... \\n" >> ${NETLOG}

	${IPC_SEND} netcfg-unconfigured

	if [ -f ${OPENVPN_ENABLED_FILE} ]
	then
		/etc/init.d/S60openvpn stop
		${GIRA_BIN}/stop-bridge.sh
	fi

	# Cleaning up routes
	route del -net 224.0.0.0 netmask 240.0.0.0 2> /dev/null
	route del default 2> /dev/null

	# Killing processes
	killall -q udhcpc

	# Removing unused files
	rm -rf ${RESOLV_CONF}

	# shut down interface
	ifconfig eth0 down >> ${NETLOG}

	printf "done.\\n"
	printf "Stopping Network done.\\n" >> ${NETLOG}
}

restart() {
	stop
	start
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart|reload)
		restart
		;;
	*)
		printf "Usage: %s {start|stop|restart}\\n" "$0"
		exit 1
esac

exit 0

