#!/bin/sh

### BEGIN INIT INFO
# Provides:          dev_mgmt_daemon
# Required-Start:    $local_fs $network $syslog
# Required-Stop:     $network $local_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Broadcom BAL core daemon
# Description:       Broadcom BAL core daemon
### END INIT INFO

NAME="dev_mgmt_daemon"
PATH="/broadcom:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
APPDIR="/broadcom"
APPBIN="dev_mgmt_daemon"
USER="root"
GROUP="root"
PORT_SPEED_FILE="$APPDIR/port_speed.soc"
TOPOLOGY_CONFIG_FILE="$APPDIR/topology_config.ini"
OLT_MODEL=`cat /sys/devices/virtual/dmi/id/board_name`
if [ "$OLT_MODEL" = "ASXvOLT16" ]; then
    Port_100G_SPEED=`cat $PORT_SPEED_FILE | awk -F "port_speed_for_100 " '{print $2}'`
    [ "$Port_100G_SPEED" = "10000" ] && TOPOLOGY_CONFIG_FILE="$APPDIR/topology_config_16_ports.ini"
    APPARGS="-pcie -d -port_100g_speed $Port_100G_SPEED -topology_config_file $TOPOLOGY_CONFIG_FILE"
elif [ "$OLT_MODEL" = "ASGvOLT64" ]; then
    Port_100G_SPEED=`cat $PORT_SPEED_FILE | awk -F "port_speed_for_100 " '{print $2}'`
    [ "$Port_100G_SPEED" = "10000" ] && TOPOLOGY_CONFIG_FILE="$APPDIR/topology_config_16_ports.ini"
    Port_25G_SPEED=`cat $PORT_SPEED_FILE | awk -F "port_speed_for_25 " '{print $2}'`
    APPARGS="-pcie -d -port_100g_speed $Port_100G_SPEED -pcie -port_25g_speed $Port_25G_SPEED -topology_config_file $TOPOLOGY_CONFIG_FILE"
else
    Port_100G_SPEED="100000"
    Port_25G_SPEED="25000"
    APPARGS="-pcie -d -port_100g_speed $Port_100G_SPEED -pcie -port_25g_speed $Port_25G_SPEED -topology_config_file $TOPOLOGY_CONFIG_FILE"
fi

# Include functions
set -e
. /lib/lsb/init-functions

start() {
  /opt/bcm68620/svk_init.sh
  sleep 10
  printf "Starting '$NAME'... "
  touch /var/log/$NAME.log
  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$APPDIR
  export USER=$USER
  start-stop-daemon --verbose --start --chuid "$USER:$GROUP" --background --no-close --chdir "$APPDIR" --exec "$APPBIN" -- $APPARGS < /dev/tty1 >> /var/log/$NAME.log 2>&1 || true
  sleep 2 && [ -z `pidof $NAME 2>/dev/null` ] || pidof $NAME > /var/run/$NAME.pid
  printf "done\n"
}

#We need this function to ensure the whole process tree will be killed
killtree() {
    local _pid=$1
    local _sig=${2-TERM}
    for _child in $(ps -o pid --no-headers --ppid ${_pid}); do
        killtree ${_child} ${_sig}
    done
    kill -${_sig} ${_pid}
}

stop() {
  printf "Stopping '$NAME'... "
  [ -z "`pidof $NAME`" ] ||
  for p in "`pidof $NAME`";do
  killtree $p 15
  sleep 0.5
  done
  rm -f /var/run/$NAME.pid
  printf "done\n"
}

status() {
  status_of_proc -p /var/run/$NAME.pid $APPDIR/$APPBIN $NAME && exit 0 || exit $?
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  status)
    status
    ;;
  *)
    echo "Usage: $NAME {start|stop|restart|status}" >&2
    exit 1
    ;;
esac

exit 0
