summaryrefslogtreecommitdiffstats
path: root/net/linuxptp/files/phc2sys.init
blob: 77942cf813fb0a20a60b7322f8ed32e5f82b45ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/bin/sh /etc/rc.common
# Init script for phc2sys from linuxptp

START=55
USE_PROCD=1
PROG=/usr/sbin/phc2sys

ID=phc2sys
ID_PTP4L=ptp4l

log() {
	local loglevel=$1; shift; local msg="$*"
	logger -t phc2sys-init -p daemon.$loglevel "$msg"
}

make_cmdline() {
	local cfg=$1
	local args dev dir loglevel ptp4l_role stats_set syncdir

	echo $PROG

	config_get dev $cfg "phc_device" ""
	[ -z "$dev" ] && { log notice "phc_device not configured, phc2sys not starting. Set 'option phc_device' in /etc/config/linuxptp."; return 1; }
	! [ -c "$dev" ] && { log crit "PHC device '$dev' not found!"; return 1; }

	dir='phc_to_sys'
	config_get ptp4l_role $ID_PTP4L "role" "auto"
	[ "$ptp4l_role" = "server" ] && dir='sys_to_phc'

	config_get syncdir $cfg "sync_direction" "$dir"
	if [ "$syncdir" = "phc_to_sys" ]; then
		echo "-s $dev -w"
	elif [ "$syncdir" = "sys_to_phc" ]; then
		echo "-s CLOCK_REALTIME -c $dev -w -O 0"
	else
		log err "Invalid sync_direction '$syncdir'! valid values: 'sys_to_phc', 'phc_to_sys'"; return 1
	fi

	echo "-m"
	echo "-q"

	config_get stats_set $cfg "stats_interval" "0"
	[ "$stats_set" -ge 1 ] && echo "-u $stats_set"

	config_get loglevel $cfg "loglevel" "5"
	[ "$stats_set" -ge 1 ] && config_get loglevel $cfg "loglevel" "6"
	echo "-l $loglevel"

	config_list_foreach $cfg "extra_args" echo
}

service_triggers() {
	procd_add_reload_trigger "linuxptp"
}

start_service() {
	local cmdline

	config_load linuxptp

	cmdline=$(make_cmdline $ID) || return 1
	log info "Starting phc2sys: $cmdline"

	procd_open_instance phc2sys
	procd_set_param command $cmdline
	procd_set_param stdout 1
	procd_set_param stderr 1
	procd_close_instance
}

stop_service() {
	log info "phc2sys exiting (if running)."
}