timemngr: use NTP servers from dhcp option 42

This commit is contained in:
Suvendhu Hansa 2025-02-27 13:50:04 +05:30 committed by Vivek Kumar Dutta
parent 4b8d721af8
commit d80d41a6f6
No known key found for this signature in database
GPG key ID: 4E09F5AD8265FD4C
4 changed files with 102 additions and 103 deletions

View file

@ -5,13 +5,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=timemngr
PKG_VERSION:=1.1.6
PKG_VERSION:=1.1.7
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/bbf/timemngr.git
PKG_SOURCE_VERSION:=98d41d8fc575a0c112bab4534122aacfc3364981
PKG_SOURCE_VERSION:=a4d21010d4070136656d3e68423504175bc871c4
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif

View file

@ -2,25 +2,3 @@ config global 'global'
option enable '1'
option dst '1'
option loglevel '2'
config client 'client'
option enable '1'
option iburst '1'
option version '4'
option peer '0'
option minpoll '6'
option maxpoll '10'
option mode 'Unicast'
option interface 'wan'
list server 'ntp1.sth.netnod.se'
list server 'ntp1.gbg.netnod.se'
config client 'dhcp_driven'
option enable '0'
option interface 'wan'
option iburst '1'
option version '4'
option peer '0'
option minpoll '6'
option maxpoll '10'
option mode 'Unicast'

View file

@ -1,5 +1,6 @@
#!/bin/sh
. /lib/functions.sh
. /usr/share/libubox/jshn.sh
log() {
@ -8,25 +9,42 @@ log() {
configure_ntp_servers()
{
local ntp_interface
uci_changed=0
servers=""
# Only change the ntp servers if interface matches with the defined interface
ntp_interface="$(uci -q get time.dhcp_driven.interface)"
if [ "${ntp_interface}" != "${1}" ]; then
return 0
fi
json_load "$(ifstatus $ntp_interface)"
json_load "$(ifstatus ${1})"
json_select data
json_get_var servers ntpserver ""
exist_dhcp_ntp_server="$(uci -q get time.dhcp_driven.server)"
if [ "${servers}" != "${exist_dhcp_ntp_server}" ]; then
uci -q del time.dhcp_driven.server
for server in ${servers}; do
uci -q add_list time.dhcp_driven.server="${server}"
done
if [ -z "${servers}" ]; then
return
fi
# Find the dhcp discovery enabled section
config_load time
client_sec="$(uci -q show time | grep "=client" | cut -d'=' -f 1 | cut -d'.' -f2)"
for client in $client_sec; do
config_get_bool enable $client enable "1"
config_get_bool discovery $client dhcp_discovery "1"
config_get intf $client interface ""
if [ "${intf}" == "${1}" ] && [ "${discovery}" -eq 1 ]; then
config_get cur_servers $client server ""
if [ "${servers}" != "${cur_servers}" ]; then
uci -q del time.$client.server
for server in ${servers}; do
uci -q add_list time.$client.server="${server}"
done
if [ "${enable}" -eq 1 ]; then
uci_changed=1
fi
fi
fi
done
if [ "${uci_changed}" -eq 1 ]; then
log "Restarting timemngr"
ubus call uci commit '{"config":"time"}'
fi

View file

@ -8,80 +8,83 @@ function get_system_ntp_option()
echo "${val}"
}
# migrate system ntp servers to time
if uci -q get system.ntp >/dev/null 2>&1; then
function add_default_config()
{
uci -q set time.client_default="client"
enabled="$(get_system_ntp_option enabled)"
if [ -z "${enabled}" ]; then
enabled="1"
fi
uci -q set time.client_default.enable="$enabled"
uci -q set time.client_default.dhcp_discovery="1"
uci -q set time.client_default.iburst="1"
uci -q set time.client_default.version="4"
uci -q set time.client_default.peer="0"
uci -q set time.client_default.minpoll="6"
uci -q set time.client_default.maxpoll="10"
uci -q set time.client_default.mode="Unicast"
interface="$(get_system_ntp_option interface)"
if [ -n "${interface}" ]; then
uci -q set time.client_default.interface="${interface}"
else
uci -q set time.client_default.interface="wan"
fi
servers="$(get_system_ntp_option server)"
if [ -z "${servers}" ]; then
servers="ntp1.sth.netnod.se ntp1.gbg.netnod.se"
fi
for server in $servers; do
uci -q add_list time.client_default.server="${server}"
done
}
migrate_timemngr_config() {
if [ ! -f "/etc/config/time" ]; then
# Time manager UCI is not present
touch /etc/config/time
uci -q set time.global="global"
uci -q set time.global.enable="1"
uci -q set time.global.dst="1"
uci -q set time.client="client"
enabled="$(get_system_ntp_option enabled)"
if [ -z "${enabled}" ]; then
enabled="1"
fi
uci -q set time.client.enable="$enabled"
uci -q set time.client.iburst="1"
uci -q set time.client.version="4"
uci -q set time.client.peer="0"
uci -q set time.client.minpoll="6"
uci -q set time.client.maxpoll="10"
uci -q set time.client.mode="Unicast"
uci -q set time.client.interface="wan"
servers="$(get_system_ntp_option server)"
if [ -z "${servers}" ]; then
servers="ntp1.sth.netnod.se ntp1.gbg.netnod.se"
fi
for server in $servers; do
uci -q add_list time.client.server="${server}"
done
# DHCP client instance
uci -q set time.dhcp_driven="client"
uci -q set time.dhcp_driven.enable="0"
interface="$(get_system_ntp_option interface)"
if [ -n "${interface}" ]; then
uci -q set time.dhcp_driven.interface="${interface}"
else
uci -q set time.dhcp_driven.interface="wan"
fi
uci -q set time.dhcp_driven.iburst="1"
uci -q set time.dhcp_driven.version="4"
uci -q set time.dhcp_driven.peer="0"
uci -q set time.dhcp_driven.minpoll="6"
uci -q set time.dhcp_driven.maxpoll="10"
uci -q set time.dhcp_driven.mode="Unicast"
# Add timeserver
uci -q set time.server="server"
uci -q set time.server.enable="$(get_system_ntp_option enable_server)"
uci -q set time.server.mode="Unicast"
uci -q set time.server.ttl="255"
# Do default settings since nothing configured
add_default_config
else
servers="$(get_system_ntp_option server)"
if [ -n "${servers}" ]; then
uci set time.client.server=""
for server in $servers; do
uci -q add_list time.client.server="${server}"
# Time manager UCI is present, check if clients are already configured
client_list="$(uci -q show time | grep "=client" | cut -d'=' -f1 | cut -d'.' -f2)"
if [ -z "${client_list}" ]; then
# Do default settings since nothing configured
add_default_config
else
# migrate dhcp_discovery option
for client in $client_list; do
discovery="$(uci -q get time.$client.dhcp_discovery)"
if [ -n "${discovery}" ]; then
continue
fi
if [ "${client}" == "dhcp_driven" ]; then
uci -q set time.$client.dhcp_discovery="1"
else
serv="$(uci -q get time.$client.server)"
if [ -z "${serv}" ]; then
# No servers for this client configured
uci -q set time.$client.dhcp_discovery="1"
else
# Servers for this client is configured
uci -q set time.$client.dhcp_discovery="0"
fi
fi
done
fi
interface="$(get_system_ntp_option interface)"
if [ -n "${interface}" ]; then
uci -q set time.dhcp_driven.interface="${interface}"
fi
fi
uci -q delete system.ntp
}
uci commit time
uci commit system
fi
migrate_timemngr_config