From patchwork Mon May 23 12:30:57 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans Dedecker X-Patchwork-Id: 625161 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (caladan.dune.hu [78.24.191.180]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3rCyZZ00WVz9t66 for ; Mon, 23 May 2016 22:31:16 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=fqr+qA2d; dkim-atps=neutral Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id EEF62B91D74; Mon, 23 May 2016 14:31:08 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP; Mon, 23 May 2016 14:31:08 +0200 (CEST) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 5A1BFB91D62 for ; Mon, 23 May 2016 14:31:07 +0200 (CEST) X-policyd-weight: using cached result; rate: -7 Received: from mail-wm0-f66.google.com (mail-wm0-f66.google.com [74.125.82.66]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Mon, 23 May 2016 14:31:07 +0200 (CEST) Received: by mail-wm0-f66.google.com with SMTP id f75so8224874wmf.2 for ; Mon, 23 May 2016 05:31:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=/E2U+Nioavb5J0TWRzSknVjgtHiee44/nrLcTkR4XLE=; b=fqr+qA2dFoYCmE4PhGbW5ch6T2a5LEM8ol7WWAAixHDeY2WktzbqMPIeaD8t6L3G8a 0KF91F7ZoKjtSujuStznWsoGEx6A9/cC+x/iMUJB+pXG4O6b1ohjMEh8WXjCCAxuzj+A zfxWVLz1pCs3ISPN1s1wzHU2MzUNy6TAEA5WSAoQNXXL9JaoMWp9FeiWXHzCabxj8Stf KlAI5H7OWQJJhyLWs1cvbruNGLeGFWtPHdfI45q1/hnjb1/pzKtcIAkjgsfAcGJ+yOov 8uLVFmGWyuikoNm4MQt4SF8yWjbFtNjDb7pNhHEMUfPZE09ZaEEw2cW9okD7ChhYGc3v ekgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=/E2U+Nioavb5J0TWRzSknVjgtHiee44/nrLcTkR4XLE=; b=Ql8Zs1msxp+y/Rr4XtmTBdas86x6C6oc1Jtp3q/ucU4l2xvz2w2LZ1J7BrCMS7efmJ XDZ0/OaX2V+K3DbE6RFFDBWO5bSmO7bxrsqdtDtX3xRL8Uw0s/VkpkIR3eYuqbP/Nmqg PQXI4bSJelbhONtBBZCZGTkTyo13sdHZ1HEtfwJ8aSyleHIswTb6Xh2oiljdHrm2cNAY IIVbi5AfSEL/LQ0RqX63c5BYSHQVLOpgx1Au0crz8oZ6rQrVvPNZ1Zkk+YKzWmHfL/xX kD4IAiNofjBJhaEioA6pvPBPaZCbxAJwRU5kN34uWbIQhSTDySX4zS/7qCRtSNlmb3uI WuIg== X-Gm-Message-State: AOPr4FXhZUFUWwcbGVuWHjCbhYvhq2Ck7HOGqn6aipXhhTCqv3/COJ990X/4FifQWJWlsQ== X-Received: by 10.28.211.213 with SMTP id k204mr16485813wmg.35.1464006666522; Mon, 23 May 2016 05:31:06 -0700 (PDT) Received: from cplx43.eu.thmulti.com ([141.11.62.7]) by smtp.gmail.com with ESMTPSA id jp2sm35151668wjc.16.2016.05.23.05.31.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 23 May 2016 05:31:05 -0700 (PDT) From: Hans Dedecker To: openwrt-devel@lists.openwrt.org, lede-dev@lists.infradead.org Date: Mon, 23 May 2016 14:30:57 +0200 Message-Id: <1464006657-13480-1-git-send-email-dedeckeh@gmail.com> X-Mailer: git-send-email 1.9.1 Subject: [OpenWrt-Devel] [PATCH v2] busybox: sysntpd - Support for NTP servers received via DHCP(v6) X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Hans Dedecker MIME-Version: 1.0 Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" 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 --- v1 -> v2: Make jsonfilter dependant on BUSYBOX_CONFIG_NTPD Pipe output of network dump into jsonfilter use_dhcp is by default enabled Install fine grained procd interface triggers if dhcp_interface is configured package/utils/busybox/Makefile | 4 +-- package/utils/busybox/files/sysntpd | 57 +++++++++++++++++++++++++++++++++---- 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/package/utils/busybox/Makefile b/package/utils/busybox/Makefile index 24c064c..e5b55e0 100644 --- a/package/utils/busybox/Makefile +++ b/package/utils/busybox/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=busybox PKG_VERSION:=1.24.2 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_FLAGS:=essential PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 @@ -17,7 +17,7 @@ PKG_SOURCE_URL:=http://www.busybox.net/downloads \ http://distfiles.gentoo.org/distfiles/ PKG_MD5SUM:=2eaae519cac1143bcf583636a745381f -PKG_BUILD_DEPENDS:=BUSYBOX_USE_LIBRPC:librpc BUSYBOX_CONFIG_PAM:libpam +PKG_BUILD_DEPENDS:=BUSYBOX_USE_LIBRPC:librpc BUSYBOX_CONFIG_PAM:libpam +BUSYBOX_CONFIG_NTPD:jsonfilter PKG_BUILD_PARALLEL:=1 PKG_CHECK_FORMAT_SECURITY:=0 diff --git a/package/utils/busybox/files/sysntpd b/package/utils/busybox/files/sysntpd index f73bb83..6d44280 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 }