#!/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`
PRODUCT_NAME=

# RLT-3200G-W - wait for onlp driver to load
if [ "$OLT_MODEL" = "Default string" ]; then
    RETRY_COUNT=0
    while [ -z "$PRODUCT_NAME" ]
    do
        PRODUCT_NAME=$(onlpd -s | grep Part | awk '{print $3}')
        echo "RETRY_COUNT=$RETRY_COUNT, product name=$PRODUCT_NAME"
        sleep 1
	RETRY_COUNT=$((RETRY_COUNT+1))
    done
    OLT_MODEL=$PRODUCT_NAME
fi

    APPARGS="-pcie -d"

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

start() {
  if [ "$OLT_MODEL" = "ASGvOLT64" ] || [ "$OLT_MODEL" = "ASXvOLT16" ]; then
    /opt/bcm68620/svk_init.sh
  elif [ "$OLT_MODEL" = "RLT-3200G" ] || [ "$OLT_MODEL" = "RLT-1600G" ] || [ "$OLT_MODEL" = "RLT-1600X" ]; then
    /opt/bcm68650/svk_init.sh
  fi

  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
