aboutsummaryrefslogtreecommitdiffstats
path: root/package/utils/busybox/files/sysntpd
diff options
context:
space:
mode:
authorHans Dedecker <dedeckeh@gmail.com>2016-05-23 14:30:57 +0200
committerJo-Philipp Wich <jo@mein.io>2016-05-24 13:30:58 +0200
commit6707d9750aa37df75fc1d5c9e64ab599f608c3a2 (patch)
treec28c2c4655b77c5008ba93e358592d680abbb8cb /package/utils/busybox/files/sysntpd
parent2ac21bd793946a214295b760cd652b4150d3dc07 (diff)
downloadupstream-6707d9750aa37df75fc1d5c9e64ab599f608c3a2.tar.gz
upstream-6707d9750aa37df75fc1d5c9e64ab599f608c3a2.tar.bz2
upstream-6707d9750aa37df75fc1d5c9e64ab599f608c3a2.zip
busybox: sysntpd - Support for NTP servers received via DHCP(v6)
The busybox ntpd utility currently uses ntp servers specified in uci. This patch allows the ntpd utility to use NTP servers received via DHCP(v6) Following uci parameters have been added: use_dhcp : enables NTP server config via DHCP(v6) dhcp_interface : use NTP servers received only on the specified DHCP(v6) interfaces; if empty all interfaces are considered Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
Diffstat (limited to 'package/utils/busybox/files/sysntpd')
-rwxr-xr-xpackage/utils/busybox/files/sysntpd57
1 files changed, 52 insertions, 5 deletions
diff --git a/package/utils/busybox/files/sysntpd b/package/utils/busybox/files/sysntpd
index f73bb83082..6d44280393 100755
--- a/package/utils/busybox/files/sysntpd
+++ b/package/utils/busybox/files/sysntpd
@@ -7,13 +7,34 @@ USE_PROCD=1
PROG=/usr/sbin/ntpd
HOTPLUG_SCRIPT=/usr/sbin/ntpd-hotplug
+get_dhcp_ntp_servers() {
+ local interfaces="$1"
+ local filter="*"
+ local interface ntpservers ntpserver
+
+ for interface in $interfaces; do
+ [ "$filter" = "*" ] && filter="@.interface='$interface'" || filter="$filter,@.interface='$interface'"
+ done
+
+ ntpservers=$(ubus call network.interface dump | jsonfilter -e "@.interface[$filter]['data']['ntpserver']")
+
+ for ntpserver in $ntpservers; do
+ local duplicate=0
+ local entry
+ for entry in $server; do
+ [ "$ntpserver" = "$entry" ] && duplicate=1
+ done
+ [ "$duplicate" = 0 ] && server="$server $ntpserver"
+ done
+}
+
validate_ntp_section() {
uci_validate_section system timeserver "${1}" \
- 'server:list(host)' 'enabled:bool:1' 'enable_server:bool:0'
+ 'server:list(host)' 'enabled:bool:1' 'enable_server:bool:0' 'use_dhcp:bool:1' 'dhcp_interface:list(string)'
}
start_service() {
- local server enabled enable_server peer
+ local server enabled enable_server use_dhcp dhcp_interface peer
validate_ntp_section ntp || {
echo "validation failed"
@@ -22,6 +43,8 @@ start_service() {
[ $enabled = 0 ] && return
+ [ $use_dhcp = 1 ] && get_dhcp_ntp_servers "$dhcp_interface"
+
[ -z "$server" ] && return
procd_open_instance
@@ -35,8 +58,32 @@ start_service() {
procd_close_instance
}
-service_triggers()
-{
- procd_add_reload_trigger "system"
+service_triggers() {
+ local script name use_dhcp
+
+ script=$(readlink -f "$initscript")
+ name=$(basename ${script:-$initscript})
+
+ procd_open_trigger
+ procd_add_config_trigger "config.change" "system" /etc/init.d/$name reload
+
+ config_load system
+ config_get use_dhcp ntp use_dhcp 1
+
+ [ $use_dhcp = 1 ] && {
+ local dhcp_interface
+ config_get dhcp_interface ntp dhcp_interface
+
+ if [ -n "$dhcp_interface" ]; then
+ for n in $dhcp_interface; do
+ procd_add_interface_trigger "interface.*" $n /etc/init.d/$name reload
+ done
+ else
+ procd_add_raw_trigger "interface.*" 1000 /etc/init.d/$name reload
+ fi
+ }
+
+ procd_close_trigger
+
procd_add_validation validate_ntp_section
}