#!/bin/sh
#
# Start linuxptp
#

PTP4L_ARGS="-f /etc/ptp4l.d/ptp4l.cfg"

# shellcheck source=/dev/null
[ -r "/etc/ptp4l.d/cliopt" ] && . "/etc/ptp4l.d/cliopt"

DAEMON="ptp4l"
PIDFILE="/var/run/$DAEMON.pid"

setVar() {
	ID="$1"
	PIDFILE="/var/run/$DAEMON.pid"
	CFG="/etc/ptp4l.d/ptp4l.cfg"
	PTP4L_ARGSN="${PTP4L_ARGS:--f ${CFG}}"
	[ 'M' = "$ID" ] && return

	CFG="/etc/ptp4l.d/ptp4l.${ID}.cfg"
	PTP4L_ARGSD="-f ${CFG}"
	PIDFILE="/var/run/$DAEMON.${ID}.pid"
	case "${ID}" in
		0) PTP4L_ARGSN="${PTP4L_ARGS0:-${PTP4L_ARGSD}}"; ;;
		1) PTP4L_ARGSN="${PTP4L_ARGS1:-${PTP4L_ARGSD}}"; ;;
		2) PTP4L_ARGSN="${PTP4L_ARGS2:-${PTP4L_ARGSD}}"; ;;
		3) PTP4L_ARGSN="${PTP4L_ARGS3:-${PTP4L_ARGSD}}"; ;;
		4) PTP4L_ARGSN="${PTP4L_ARGS4:-${PTP4L_ARGSD}}"; ;;
		5) PTP4L_ARGSN="${PTP4L_ARGS5:-${PTP4L_ARGSD}}"; ;;
	esac
}

startPTP() {
	[ -e "${CFG}" ] || return 0
	printf "Starting linuxptp daemon(%s): " "${ID}"
	start-stop-daemon -S -b -q -m -p "$PIDFILE" \
		-x /usr/sbin/$DAEMON -- $PTP4L_ARGSN
	status=$?
	if [ "$status" -eq 0 ]; then
		echo "OK"
	else
		echo "FAIL"
	fi
	return $status
}

start() {
	for id in M 0 1 2 3 4 5; do
		setVar "${id}"
		startPTP
	done
}

stopPTP() {
	#[ -e "${CFG}" ] || return 0
	[ -e "$PIDFILE" ] || return 0
	printf "Stopping linuxptp daemon(%s): " "${ID}"
	start-stop-daemon -K -q -p "$PIDFILE"
	status=$?
	if [ "$status" -eq 0 ]; then
		rm -f "$PIDFILE"
		echo "OK"
	else
		echo "FAIL"
	fi
	return $status
}

stop() {
	for id in M 0 1 2 3 4 5; do
		setVar "${id}"
		stopPTP
	done
}

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

exit $?
