OpenWrt – Blame information for rev 2
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | #!/bin/sh /etc/rc.common |
2 | # Copyright (C) 2011 OpenWrt.org |
||
3 | |||
4 | START=98 |
||
5 | |||
6 | USE_PROCD=1 |
||
7 | PROG=/usr/sbin/ntpd |
||
8 | HOTPLUG_SCRIPT=/usr/sbin/ntpd-hotplug |
||
9 | |||
10 | get_dhcp_ntp_servers() { |
||
11 | local interfaces="$1" |
||
12 | local filter="*" |
||
13 | local interface ntpservers ntpserver |
||
14 | |||
15 | for interface in $interfaces; do |
||
16 | [ "$filter" = "*" ] && filter="@.interface='$interface'" || filter="$filter,@.interface='$interface'" |
||
17 | done |
||
18 | |||
19 | ntpservers=$(ubus call network.interface dump | jsonfilter -e "@.interface[$filter]['data']['ntpserver']") |
||
20 | |||
21 | for ntpserver in $ntpservers; do |
||
22 | local duplicate=0 |
||
23 | local entry |
||
24 | for entry in $server; do |
||
25 | [ "$ntpserver" = "$entry" ] && duplicate=1 |
||
26 | done |
||
27 | [ "$duplicate" = 0 ] && server="$server $ntpserver" |
||
28 | done |
||
29 | } |
||
30 | |||
31 | validate_ntp_section() { |
||
32 | uci_load_validate system timeserver "$1" "$2" \ |
||
33 | 'server:list(host)' 'enabled:bool:1' 'enable_server:bool:0' 'use_dhcp:bool:1' 'dhcp_interface:list(string)' |
||
34 | } |
||
35 | |||
36 | start_ntpd_instance() { |
||
37 | local peer |
||
38 | |||
39 | [ "$2" = 0 ] || { |
||
40 | echo "validation failed" |
||
41 | return 1 |
||
42 | } |
||
43 | |||
44 | [ $enabled = 0 ] && return |
||
45 | |||
46 | [ $use_dhcp = 1 ] && get_dhcp_ntp_servers "$dhcp_interface" |
||
47 | |||
48 | [ -z "$server" -a "$enable_server" = "0" ] && return |
||
49 | |||
50 | procd_open_instance |
||
51 | procd_set_param command "$PROG" -n -N |
||
52 | [ "$enable_server" = "1" ] && procd_append_param command -l |
||
53 | [ -x "$HOTPLUG_SCRIPT" ] && procd_append_param command -S "$HOTPLUG_SCRIPT" |
||
54 | for peer in $server; do |
||
55 | procd_append_param command -p $peer |
||
56 | done |
||
57 | procd_set_param respawn |
||
58 | procd_close_instance |
||
59 | } |
||
60 | |||
61 | start_service() { |
||
62 | validate_ntp_section ntp start_ntpd_instance |
||
63 | } |
||
64 | |||
65 | service_triggers() { |
||
66 | local script name use_dhcp |
||
67 | |||
68 | script=$(readlink -f "$initscript") |
||
69 | name=$(basename ${script:-$initscript}) |
||
70 | |||
71 | procd_add_config_trigger "config.change" "system" /etc/init.d/$name reload |
||
72 | |||
73 | config_load system |
||
74 | config_get use_dhcp ntp use_dhcp 1 |
||
75 | |||
76 | [ $use_dhcp = 1 ] && { |
||
77 | local dhcp_interface |
||
78 | config_get dhcp_interface ntp dhcp_interface |
||
79 | |||
80 | if [ -n "$dhcp_interface" ]; then |
||
81 | for n in $dhcp_interface; do |
||
82 | procd_add_interface_trigger "interface.*" $n /etc/init.d/$name reload |
||
83 | done |
||
84 | else |
||
85 | procd_add_raw_trigger "interface.*" 1000 /etc/init.d/$name reload |
||
86 | fi |
||
87 | } |
||
88 | |||
89 | procd_add_validation validate_ntp_section |
||
90 | } |