[OpenWrt-Devel] [PATCH] busybox: sysntpd - Support for NTP servers received via DHCP(v6)

Amine Aouled Hamed amine.ahd at gmail.com
Fri May 20 06:49:00 EDT 2016


Hi,
One feature that was requested is the ability to specify a list of
interfaces to get servers from.
You can save the list as an option to the config file and add a trigger to
only those interfaces.
Regards,
Amine.

On Thu, May 19, 2016 at 6:57 PM, Hans Dedecker <dedeckeh at gmail.com> 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
>  }
> --
> 1.9.1
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.infradead.org/pipermail/openwrt-devel/attachments/20160520/c53e5486/attachment.htm>
-------------- next part --------------
_______________________________________________
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