<div dir="ltr"><div><div><div><div>Hi,<br></div>I tried this method the first time but it does nothing.<br></div>I just tried it again now and the same thing happens (added a log message to logread in case it is restarted).<br></div>Thats why I went to the hotplug script, add to it the fact that we cant choose specific interfaces to listen to using this method.<br><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 20, 2016 at 1:51 PM, Felix Fietkau <span dir="ltr"><<a href="mailto:nbd@openwrt.org" target="_blank">nbd@openwrt.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 2016-01-20 13:34, amine ahd wrote:<br>
> The current state of NTP is to load the list of NTP servers<br>
> from the static file /etc/config/system.<br>
> This patch allows ntpd to get NTP servers from DHCP.<br>
><br>
><br>
> Changes from V1:<br>
>       -Users could choose not to use DHCP by setting "use_dhcp" to 0 in /etc/config/system under the ntp section.<br>
>       -Users could specify which interfaces to use to get NTP servers from.<br>
>       -Sysntpd will exit if no servers are specified in the static list and the DHCP option is disabled.<br>
>       -Sysntpd will restart only if all of the following conditions are met:<br>
>               *The user allowed DHCP to be used for NTP.<br>
>               *The iface action is UP.<br>
>               *The iface is specified in the list.<br>
>               *The protocol in use is either DHCP or DHCPv6.<br>
>       -Code improvements.<br>
><br>
> Signed-off-by: amine hamed <<a href="mailto:amine.ahd@gmail.com">amine.ahd@gmail.com</a>><br>
> ---<br>
>  package/utils/busybox/Makefile              |  3 ++<br>
>  package/utils/busybox/files/sysntpd         | 31 +++++++++++++++--<br>
>  package/utils/busybox/files/sysntpd.hotplug | 54 +++++++++++++++++++++++++++++<br>
>  3 files changed, 85 insertions(+), 3 deletions(-)<br>
>  create mode 100644 package/utils/busybox/files/sysntpd.hotplug<br>
><br>
> diff --git a/package/utils/busybox/files/sysntpd.hotplug b/package/utils/busybox/files/sysntpd.hotplug<br>
> new file mode 100644<br>
> index 0000000..34a2f7a<br>
> --- /dev/null<br>
> +++ b/package/utils/busybox/files/sysntpd.hotplug<br>
> @@ -0,0 +1,54 @@<br>
> +#!/bin/sh<br>
> +<br>
> +. /lib/functions.sh<br>
> +. /usr/share/libubox/jshn.sh<br>
> +<br>
> +is_valid_interface() {<br>
> +     local list="$(uci get system.ntp.dhcp_ifaces)"<br>
> +     [ -z "$list" ] && return 0<br>
> +<br>
> +     case " $list " in<br>
> +             *" $INTERFACE "*)<br>
> +                     return 0<br>
> +             ;;<br>
> +             *)<br>
> +                     return 1<br>
> +             ;;<br>
> +     esac<br>
> +}<br>
> +<br>
> +config_load system<br>
> +local proto="$(uci get network.$INTERFACE.proto)"<br>
> +config_get_bool "use_dhcp" "ntp" "use_dhcp"<br>
> +[ "$use_dhcp" = 1 ] && [ "$ACTION" = ifup ] && is_valid_interface && [ "$proto" = dhcp -o "$proto" = dhcp6 ] || exit 0<br>
> +<br>
> +handle_default_ntp_servers() {<br>
> +     local server="$1"<br>
> +     new_ntp_servers="$new_ntp_servers $server"<br>
> +}<br>
> +<br>
> +local dhcp_ntp_servers iface status ntpserver dump<br>
> +local dhcp_ifaces="$(uci -q get system.ntp.dhcp_ifaces)"<br>
> +if [ -z "$dhcp_ifaces" ]; then<br>
> +     dump="$(ubus call network.interface dump)"<br>
> +     dhcp_ntp_servers=$(jsonfilter -s "$dump" -e '$["interface"][*]["data"]["ntpserver"]')<br>
> +else<br>
> +     for iface in $dhcp_ifaces; do<br>
> +             status="$(ubus call network.interface.$iface status)"<br>
> +             ntpserver=$(jsonfilter -s "$status" -e '$["data"]["ntpserver"]')<br>
> +             [ -n "$ntpserver" ] && \<br>
> +                     dhcp_ntp_servers="$dhcp_ntp_servers $ntpserver"<br>
> +     done<br>
> +fi<br>
> +<br>
> +new_ntp_servers="$dhcp_ntp_servers"<br>
> +#get the default list of ntp servers from the config file and append it to the new list<br>
> +config_list_foreach "ntp" "server" handle_default_ntp_servers<br>
> +<br>
> +#get the current list of ntp servers in the running instance<br>
> +local current_ntp_servers=$(ubus call service list '{"name":"sysntpd", "verbose":true}' | jsonfilter -e '$["sysntpd"]["instances"][*]["data"]["ntp_servers"]')<br>
> +#if its an up action, the iface uses DHCP and the new list of ntp servers is different from the old, restart sysntpd<br>
> +[ "$current_ntp_servers" != "$new_ntp_servers" ] || exit 0<br>
> +<br>
> +logger -t sysntpd "Reloading sysntpd due to $ACTION of interface $INTERFACE and a change of NTP servers"<br>
> +/etc/init.d/sysntpd enabled && /etc/init.d/sysntpd reload<br>
This is all way more complex than it needs to be. There's a simple solution -<br>
just replace the sysntpd init script service_triggers function with this:<br>
<br>
service_triggers() {<br>
        local script=$(readlink "$initscript")<br>
        local name=$(basename ${script:-$initscript})<br>
<br>
        procd_open_trigger<br>
        procd_add_raw_trigger "interface.*" 2000 /etc/init.d/$name reload<br>
        procd_close_trigger<br>
<br>
        procd_add_reload_trigger "system"<br>
        procd_add_validation validate_ntp_section<br>
}<br>
<br>
You can drop the hotplug script entirely.<br>
What this will do is it will instruct procd to run the init script,<br>
whenever an interface up/down event arrives (waiting for up to 2 seconds<br>
before starting the script instead of starting it once for every single<br>
event). procd will ensure that the sysntpd daemon is only restarted if<br>
the command line actually changed, so you don't have to add any code<br>
to compare the old and the new ntp server list.<br>
<span class="HOEnZb"><font color="#888888"><br>
- Felix<br>
</font></span></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><span style="font-size:12px;font-family:Verdana;color:#4d4f53;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Amine Hamed</span><span style="font-size:12px;font-family:Verdana;color:#ff850c;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"> | Software Engineer</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><span style="font-size:12px;font-family:Verdana;color:#ff850c;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><br></span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><span style="font-size:11.333333333333332px;font-family:Verdana;color:#ff850c;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"> </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><span style="font-size:10px;font-family:Verdana;color:#ff9900;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><img src="https://lh4.googleusercontent.com/8B5yxCEN2oollZXecK9eKNXuC75Ixe1z_o1_utaFMisiaEIuyeHpB1Ue751mhA10jB1AqcU3Jd7h1E5Pmg5FK6nNggia3w4xNbeeK7X1mISuaf8vdvLuhs4uFHyAHp0_=s1600" style="border:none" height="16px;" width="85px;"></span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><br><span style="font-size:10px;font-family:Verdana;color:#ff9900;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"></span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><span style="font-size:10px;font-family:Verdana;color:#4d4f53;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"> </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><span style="font-size:12px;font-family:Verdana;color:#4d4f53;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Ocedo GmbH | Hirschstrasse 7 | 76133 Karlsruhe | Germany</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><span style="font-size:12px;font-family:Verdana;color:#4d4f53;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Email</span><span style="font-size:12px;font-family:Verdana;color:#444444;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"> </span><span style="font-size:12px;font-family:Verdana;color:#ff850c;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><a href="mailto:ahamed@ocedo.com" target="_blank">ahamed@ocedo.com</a></span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><span style="font-size:12px;font-family:Verdana;color:#ff850c;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><a href="mailto:ahamed@ocedo.com" target="_blank"><br></a></span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><span style="font-size:9.333333333333332px;font-family:Verdana;color:#4d4f53;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"> </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><span style="font-size:9.333333333333332px;font-family:Verdana;color:#4d4f53;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">REGISTERED OFFICE: KARLSRUHE | DISTRICT COURT: MANNHEIM | REGISTER NUMBER: HRB 717873   </span></p><span style="font-size:9.333333333333332px;font-family:Verdana;color:#4d4f53;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">MANAGING DIRECTOR: MARKUS HENNIG|JAN HICHERT</span></div></div></div></div></div></div>
</div>