#!/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"
APPARGS="-pcie -d"
PID_FILE="root_dev_mgmt_pid"
USER="root"
GROUP="root"

# 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
  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
  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 `cat /tmp/$PID_FILE 2>/dev/null` ] || \
  while test -d /proc/$(cat /tmp/$PID_FILE); do
    killtree $(cat /tmp/$PID_FILE) 15
    sleep 0.5
  done 
  [ -z `cat /tmp/$PID_FILE 2>/dev/null` ] || rm /tmp/$PID_FILE
  printf "done\n"
}

status() {
  status_of_proc -p /tmp/$PID_FILE $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
