[OpenWrt-Devel] [LEDE-DEV] [PATCH] busybox: sysntpd - Support for NTP servers received via DHCP(v6)
Hans Dedecker
dedeckeh at gmail.com
Thu May 19 16:40:10 EDT 2016
Hi Jo,
On Thu, May 19, 2016 at 7:04 PM, Jo-Philipp Wich <jo at mein.io> wrote:
> Hi Hans,
>
> staged into https://git.lede-project.org/?p=lede/jow/staging.git
>
> A few improvement ideas though;
>
> - maybe we can make the jsonfilter dependency conditionally depending
> on the ntpd applet
> - maybe pipe the ubus interface status dump directly to jsonfilter
> - is there any reason to not make "use_dhcp" the default?
I wanted to preserve the ntp server behavior and only change the
behavior when configured in order to keep backwards compatibility. You
favour enabling DHCP ntp server config without explicit config ?
Regarding the improvements do you want me to send a patch containing
the diff with the already staged commit or do you prefer a v2 patch ?
Hans
>
> ~ Jo
>
> On 05/19/2016 06:57 PM, Hans Dedecker wrote:
>> 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 at gmail.com>
>> ---
>>
>> The patch is based on a previous discussion held on the OpenWRT-devel mailing list
>> (https://lists.openwrt.org/pipermail/openwrt-devel/2016-January/039081.html) as per Felix's
>> comments this solution is based on procd interface service triggers
>>
>> package/utils/busybox/Makefile | 2 +-
>> package/utils/busybox/files/sysntpd | 43 ++++++++++++++++++++++++++++++++-----
>> 2 files changed, 39 insertions(+), 6 deletions(-)
>>
>> diff --git a/package/utils/busybox/Makefile b/package/utils/busybox/Makefile
>> index 24c064c..24e0e11 100644
>> --- a/package/utils/busybox/Makefile
>> +++ b/package/utils/busybox/Makefile
>> @@ -42,7 +42,7 @@ define Package/busybox
>> MAINTAINER:=Felix Fietkau <nbd at openwrt.org>
>> TITLE:=Core utilities for embedded Linux
>> URL:=http://busybox.net/
>> - DEPENDS:=+BUSYBOX_USE_LIBRPC:librpc +BUSYBOX_CONFIG_PAM:libpam
>> + DEPENDS:=+BUSYBOX_USE_LIBRPC:librpc +BUSYBOX_CONFIG_PAM:libpam +jsonfilter
>> MENU:=1
>> endef
>>
>> diff --git a/package/utils/busybox/files/sysntpd b/package/utils/busybox/files/sysntpd
>> index f73bb83..5c663d7 100755
>> --- a/package/utils/busybox/files/sysntpd
>> +++ b/package/utils/busybox/files/sysntpd
>> @@ -7,13 +7,35 @@ USE_PROCD=1
>> PROG=/usr/sbin/ntpd
>> HOTPLUG_SCRIPT=/usr/sbin/ntpd-hotplug
>>
>> +get_dhcp_ntp_servers() {
>> + local interfaces="$1"
>> + local filter="*"
>> + local network_dump interface ntpservers ntpserver
>> +
>> + network_dump=$(ubus call network.interface dump)
>> + for interface in $interfaces; do
>> + [ "$filter" = "*" ] && filter="@.interface='$interface'" || filter="$filter, at .interface='$interface'"
>> + done
>> +
>> + ntpservers=$(jsonfilter -s "$network_dump" -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:0' '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 +44,8 @@ start_service() {
>>
>> [ $enabled = 0 ] && return
>>
>> + [ $use_dhcp = 1 ] && get_dhcp_ntp_servers "$dhcp_interface"
>> +
>> [ -z "$server" ] && return
>>
>> procd_open_instance
>> @@ -35,8 +59,17 @@ start_service() {
>> procd_close_instance
>> }
>>
>> -service_triggers()
>> -{
>> - procd_add_reload_trigger "system"
>> +service_triggers() {
>> + local script name
>> +
>> + script=$(readlink -f "$initscript")
>> + name=$(basename ${script:-$initscript})
>> +
>> + procd_open_trigger
>> + procd_add_config_trigger "config.change" "system" /etc/init.d/$name reload
>> +
>> + procd_add_raw_trigger "interface.*" 2000 /etc/init.d/$name reload
>> + procd_close_trigger
>> +
>> procd_add_validation validate_ntp_section
>> }
>>
>
_______________________________________________
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