#!/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

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"
elif [ "$OLT_MODEL" = "RLT-3200G" ] || [ "$OLT_MODEL" = "RLT-3200X" ] || [ "$OLT_MODEL" = "RLT-1600G" ] || [ "$OLT_MODEL" = "RLT-1600X" ]; then
    APPARGS="-pcie -d"
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() {
  if [ "$OLT_MODEL" = "ASGvOLT64" ] || [ "$OLT_MODEL" = "ASXvOLT16" ]; then
    /opt/bcm68620/svk_init.sh
  elif [ "$OLT_MODEL" = "RLT-3200G" ] || [ "$OLT_MODEL" = "RLT-3200X" ] || [ "$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
