[OpenWrt-Devel] [PATCH 1/1] [DEV-1329] use NTP server received via DHCP
amine ahd
amine.ahd at gmail.com
Thu Jan 7 04:15:31 EST 2016
---
openwrt/package/utils/busybox/Makefile | 3 ++
openwrt/package/utils/busybox/files/sysntpd | 28 ++++++++++-
.../package/utils/busybox/files/sysntpd.hotplug | 54 ++++++++++++++++++++++
3 files changed, 83 insertions(+), 2 deletions(-)
create mode 100755 openwrt/package/utils/busybox/files/sysntpd.hotplug
diff --git a/openwrt/package/utils/busybox/Makefile b/openwrt/package/utils/busybox/Makefile
index 9571d48..3c33246 100644
--- a/openwrt/package/utils/busybox/Makefile
+++ b/openwrt/package/utils/busybox/Makefile
@@ -112,6 +112,9 @@ define Package/busybox/install
$(INSTALL_BIN) ./files/cron $(1)/etc/init.d/cron
$(INSTALL_BIN) ./files/telnet $(1)/etc/init.d/telnet
$(INSTALL_BIN) ./files/sysntpd $(1)/etc/init.d/sysntpd
+ $(INSTALL_DIR) $(1)/etc/hotplug.d
+ $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
+ $(INSTALL_BIN) ./files/sysntpd.hotplug $(1)/etc/hotplug.d/iface/30-sysntpd
$(INSTALL_BIN) ./files/ntpd-hotplug $(1)/usr/sbin/ntpd-hotplug
-rm -rf $(1)/lib64
endef
diff --git a/openwrt/package/utils/busybox/files/sysntpd b/openwrt/package/utils/busybox/files/sysntpd
index f73bb83..dec474c 100755
--- a/openwrt/package/utils/busybox/files/sysntpd
+++ b/openwrt/package/utils/busybox/files/sysntpd
@@ -1,6 +1,8 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2011 OpenWrt.org
+. /lib/functions.sh
+. /usr/share/libubox/jshn.sh
START=98
USE_PROCD=1
@@ -22,12 +24,32 @@ start_service() {
[ $enabled = 0 ] && return
- [ -z "$server" ] && return
-
procd_open_instance
procd_set_param command "$PROG" -n
[ "$enable_server" = "1" ] && procd_append_param command -l
[ -x "$HOTPLUG_SCRIPT" ] && procd_append_param command -S "$HOTPLUG_SCRIPT"
+
+ local use_dhcp="$(uci -q get system.ntp.use_dhcp)"
+ local dhcp_ifaces="$(uci -q get system.ntp.dhcp_ifaces)"
+ if [ "$use_dhcp" = 1 ]; then
+ if [ -z "$dhcp_ifaces" ]; then
+ dump=$(ubus call network.interface dump)
+ ntpservers=$(jsonfilter -s "$dump" -e '$["interface"][*]["data"]["ntpserver"]')
+ else
+ for int in $dhcp_ifaces; do
+ status=$(ubus call network.interface.$int status)
+ ntpserver=$(jsonfilter -s "$status" -e '$["data"]["ntpserver"]')
+ [ -n "$ntpserver" ] &&
+ ntpservers="$ntpservers $ntpserver"
+ done
+ fi
+ # add this data so we can use it in the sysntpd hotplug script.
+ procd_set_param data ntp_servers="$ntpservers $server"
+ for ntpserver in $ntpservers; do
+ procd_append_param command -p $ntpserver
+ done
+ fi
+
for peer in $server; do
procd_append_param command -p $peer
done
@@ -38,5 +60,7 @@ start_service() {
service_triggers()
{
procd_add_reload_trigger "system"
+
procd_add_validation validate_ntp_section
+
}
diff --git a/openwrt/package/utils/busybox/files/sysntpd.hotplug b/openwrt/package/utils/busybox/files/sysntpd.hotplug
new file mode 100755
index 0000000..a9fae1b
--- /dev/null
+++ b/openwrt/package/utils/busybox/files/sysntpd.hotplug
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/share/libubox/jshn.sh
+
+check_int() {
+ list=$(uci get system.ntp.dhcp_ifaces)
+ if [ -z $list ];
+ then
+ return 0
+ fi
+
+ if [ "${list#*$INTERFACE}" != "$list" ]
+ then
+ return 0
+ else
+ return 1
+ fi
+}
+
+local proto="$(uci get network.$INTERFACE.proto)"
+local use_dhcp="$(uci -q get system.ntp.use_dhcp)"
+[ "$use_dhcp" = 1 ] && [ "$ACTION" = ifup ] && check_int && [ "$proto" = dhcp -o "$proto" = dhcp6 ] || exit 0
+
+handle_default_ntp_servers() {
+ local server="$1"
+ new_ntp_servers="$new_ntp_servers $server"
+}
+
+local dhcp_ifaces="$(uci -q get system.ntp.dhcp_ifaces)"
+if [ -z "$dhcp_ifaces" ]; then
+ dump=$(ubus call network.interface dump)
+ dhcp_ntp_servers=$(jsonfilter -s "$dump" -e '$["interface"][*]["data"]["ntpserver"]')
+else
+ for int in $dhcp_ifaces; do
+ status=$(ubus call network.interface.$int status)
+ ntpserver=$(jsonfilter -s "$status" -e '$["data"]["ntpserver"]')
+ [ -n "$ntpserver" ] &&
+ dhcp_ntp_servers="dhcp_ntp_servers $ntpserver"
+ done
+fi
+
+new_ntp_servers="$dhcp_ntp_servers"
+#get the default list of ntp servers from the config file and append it to the new list
+config_load system
+config_list_foreach "ntp" "server" handle_default_ntp_servers
+
+#get the current list of ntp servers in the running instance
+current_ntp_servers=$(ubus call service list '{"name":"sysntpd", "verbose":true}' | jsonfilter -e '$["sysntpd"]["instances"][*]["data"]["ntp_servers"]')
+#if its an up action, the iface uses DHCP and the new list of ntp servers is different from the old, restart sysntpd
+[ "$current_ntp_servers" != "$new_ntp_servers" ] || exit 0
+
+logger -t sysntpd "Reloading sysntpd due to $ACTION of interface $INTERFACE and a change of NTP servers"
+/etc/init.d/sysntpd enabled && /etc/init.d/sysntpd reload
--
2.5.0
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list