#!/bin/sh

### BEGIN INIT INFO
# Provides:          bal_core_dist
# 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 -syslog"
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 2
  printf "Starting '$NAME'... "
  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$APPDIR
  start-stop-daemon --verbose --start --chuid "$USER:$GROUP" --background --no-close --chdir "$APPDIR" --exec "$APPBIN" -- $APPARGS 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
