#!/bin/sh

start_fn ()
{
    ( # run in subshell (and in background)
	sleep_interval_default=360
	sleep_interval_current=${sleep_interval_default}

	sleep ${sleep_interval_default} # wait just in case system is not yet ready

	i2c_err_path=/var/local/telem/errors/i2c-bus
	net_err_path=/var/local/telem/errors/usb-net

	is_lan_pwr_toggled=0

	# get should be physical interfaces count
	eth_interfaces_path=/var/local/telem/ordercode/eth_interfaces

	eth_interfaces_path_err_msg_sent=0
	while true; do
	    if [[ ! -e ${eth_interfaces_path} ]]; then
		if [[ ${eth_interfaces_path_err_msg_sent} -eq 0 ]]; then # log this error only once
		    eth_interfaces_path_err_msg_sent=1
		    logger -s -p "user.err" -t "$0" "${eth_interfaces_path} does not exist"
		fi
	    else
		break;
	    fi
	    
	    sleep ${sleep_interval_default}
	done

	eth_interfaces_estimate_count=$(cat ${eth_interfaces_path})

	while true; do
	    if [[ -e ${net_err_path} ]]; then
		logger -s -p "user.info" -t "$0" "net error indicated by other process and probably is already being resolved"
		logger -s -p "user.info" -t "$0" "defer program execution for ${sleep_interval_default} seconds"
		sleep ${sleep_interval_default}
	    fi

	    while true; do
		# get current physical interfaces count
		eth_interfaces_current_count=$(ifconfig | egrep '^(lan)?eth[0-9] ' | awk '{ print $1 }' | wc -l)
		
		if [[ ${eth_interfaces_current_count} -lt ${eth_interfaces_estimate_count} ]]; then
		    logger -s -p "user.err" -t "$0" "current number of interfaces = ${eth_interfaces_current_count}, but has to be ${eth_interfaces_estimate_count}"
		    
		    if [[ -e ${i2c_err_path} ]]; then
			logger -s -p "user.info" -t "$0" "i2c error indicated by other process and probably is already being resolved"
			logger -s -p "user.info" -t "$0" "defer program execution for ${sleep_interval_default} seconds"
			sleep ${sleep_interval_default}
		    fi
		    
		    if [[ -e ${i2c_err_path} ]]; then
			logger -s -p "user.err" -t "$0" "possible i2c malfunction(s), skip lan power toggling"
			logger -s -p "user.info" -t "$0" "issue reboot"
			reboot # watchdog will assume this was a user initiated reboot. not good. 
		    fi
		    
		    if [[ ${is_lan_pwr_toggled} -eq 1 ]]; then
			logger -s -p "user.info" -t "$0" "toggling lan power did not resolve the issue"
			logger -s -p "user.info" -t "$0" "issue reboot and setup reload"
			
			touch /var/local/telem/reload_setup_on_boot # S11telem-config will unpack and apply the current setup anfter reboot
			
			reboot # watchdog will assume this was a user initiated reboot. not good. 
			exit 1
		    fi
		    
		    logger -s -p "user.info" -t "$0" "toggle lan power"
		    /usr/local/bin/telem/gpio.sh -t LAN_BOARD_PWR OFFON
		    is_lan_pwr_toggled=1
		    sleep_interval_current=15
		elif [[ ${is_lan_pwr_toggled} -eq 1 ]]; then
		    sleep_interval_current=${sleep_interval_default}
		    is_lan_pwr_toggled=0
		    logger -s -p "user.info" -t "$0" "toggling lan power seems to resolve the issue"
		    break;
		fi
		
		sleep ${sleep_interval_current}
	    done
	    
	    sleep ${sleep_interval_default}
	done
    ) &
}

case "$1" in
  start)
    start_fn
    ;;
  stop)
    : # do nothing
    ;;
  *)
    echo $"Usage: $0 start" >&2
    exit 1
    ;;
esac
