#!/bin/sh
#
# walt-virtual-node       Start a walt virtual node
#

CONF=/etc/default/walt-vpn-node
CONSOLE=/dev/tty1    # HDMI console
WRITEFS="writefs"

msg() {
	echo "[walt-virtual-node] $1" | tee $CONSOLE
}

# Make sure the conf is OK
[ -f $CONF ] || {
    msg "Missing file '$CONF'." >&2
    exit 1
}
source $CONF
[ ! -z "$WALT_VPN_ENTRYPOINT" ] || {
    msg "File $CONF should define var WALT_VPN_ENTRYPOINT." >&2
    exit 1
}

[ -z "$WALT_VIRTUAL_NODE_MAC" ] && {
    # generate and save random mac address for virtual node
    WALT_VIRTUAL_NODE_MAC="$(printf '52:54:00:%02x:%02x:%02x' $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256)))"
    echo "WALT_VIRTUAL_NODE_MAC='$WALT_VIRTUAL_NODE_MAC'" | $WRITEFS tee -a $CONF
}

umask 077

start() {
    msg "Starting virtual node..."
    # note: when the virtual node reboots, USB peripherals plugged on the host
    # are not power cycled (since the host does not reboot itself), which can
    # cause issues.
    # thus, we use option --on-vm-reboot 'reboot', which will make the host
    # reboot too, whenever the virtual node reboots.
    screen -S walt.virtual.node -d -m   \
            walt-virtual-node --attach-usb \
                              --net-conf-udhcpc \
                              --mac $WALT_VIRTUAL_NODE_MAC \
                              --model qemu-arm-64 \
                              --on-vm-reboot 'reboot' \
                              --log-file $CONSOLE \
                              --pid-path "/var/run/walt-virtual-node.pid" \
                              --screen-session-path "/var/run/walt-virtual-node.screen" \
                              --log-prefix "walt-virtual-node"
    status=$?
    if [ "$status" -eq 0 ]; then
        msg "OK"
    else
        msg "FAIL"
    fi
    return "$status"
}
stop() {
    msg 'Stopping virtual node...'
    screen -S "walt.virtual.node" -X quit
    status=$?
    if [ "$status" -eq 0 ]; then
        msg "OK"
    else
        msg "FAILED"
    fi
    return "$status"
}
restart() {
    stop
    start
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart|reload)
    restart
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
esac

exit $?

