Compare commits

...

1 Commits

Author SHA1 Message Date
suvendhu
68595e8bf8 Implemented Device.Time as per datamodel 2.16 2023-08-04 14:40:34 +00:00
4 changed files with 324 additions and 1 deletions

View File

@@ -34,7 +34,7 @@ define Package/libbbfdm/default
SUBMENU:=TRx69
TITLE:=Library for broadband forum data model support
DEPENDS:=+libuci +libubox +libubus +libblobmsg-json +libjson-c +libcurl +libbbfdm-api \
+BBF_TR471:obudpst
+BBF_TR471:obudpst +ntpd
endef
define Package/libbbfdm
@@ -171,10 +171,13 @@ define Package/libbbfdm-api/install
endef
define Package/libbbfdm/default/install
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DIR) $(1)/lib
$(INSTALL_DIR) $(1)/etc/bbfdm
$(INSTALL_DIR) $(1)/etc/bbfdm/dmmap
$(INSTALL_DIR) $(1)/lib/upgrade/keep.d
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(CP) $(PKG_BUILD_DIR)/libbbfdm/libbbfdm.so $(1)/lib/
$(INSTALL_DATA) ./files/lib/upgrade/keep.d/bbf $(1)/lib/upgrade/keep.d/bbf
ifeq ($(CONFIG_BBF_TR143),y)
@@ -182,6 +185,10 @@ ifeq ($(CONFIG_BBF_TR143),y)
$(INSTALL_DIR) $(1)/usr/libexec/rpcd
$(INSTALL_BIN) $(PKG_BUILD_DIR)/libbbfdm/scripts/* $(1)/usr/share/bbfdm
$(LN) /usr/share/bbfdm/bbf.diag $(1)/usr/libexec/rpcd/bbf.diag
$(INSTALL_CONF) ./files/etc/config/ntp $(1)/etc/config/ntp
$(INSTALL_BIN) ./files/etc/uci-defaults/96-system-ntp-migrate $(1)/etc/uci-defaults/96-system-ntp-migrate
$(INSTALL_BIN) ./files/etc/init.d/ntp $(1)/etc/init.d/ntp
$(LN) /usr/share/bbfdm/ntpstat $(1)/usr/libexec/rpcd/ntpstat
endif
ifeq ($(CONFIG_BBFDM_ENABLE_JSON_PLUGIN),y)
$(INSTALL_DIR) $(1)/etc/bbfdm/json

View File

@@ -0,0 +1,28 @@
config global 'global'
option enable '1'
config timeclient 'client'
option enable_client '1'
option iburst '1'
option version '4'
option peer '0'
option minpoll '6'
option maxpoll '10'
option client_mode 'Unicast'
option server 'ntp1.sth.netnod.se,ntp1.gbg.netnod.se'
config timeclient 'dhcp_driven'
option enable_client '0'
option iburst '1'
option version '4'
option peer '0'
option minpoll '6'
option maxpoll '10'
option client_mode 'Unicast'
option client_interface 'wan'
option client_alias 'DHCP-driven'
config timeserver 'server'
option enable_server '1'
option server_mode 'Unicast'
option ttl '255'

213
bbfdm/files/etc/init.d/ntp Executable file
View File

@@ -0,0 +1,213 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org
START=65
STOP=65
USE_PROCD=1
PROG=/sbin/ntpd
HOTPLUG_HELPER=/usr/sbin/ntpd.hotplug-helper
config_file=/var/etc/ntpd.conf
trunc() {
echo -n "" > $config_file
}
emit() {
echo -e "$@" >> $config_file
}
validate_client_section() {
uci_validate_section ntp timeclient $1 \
'enable_client:bool:1' 'iburst:bool:1'\
'version:uinteger:4' 'peer:bool:0' \
'minpoll:uinteger:6' 'maxpoll:uinteger:10' \
'client_mode:string:Unicast' 'server:string'
}
validate_global_section() {
uci_validate_section ntp global global \
'enable:bool:1'
}
validate_server_section() {
uci_validate_section ntp timeserver server \
'enable_server:bool:1' 'server_mode:string:Unicast'\
'ttl:uinteger:255' 'interface:string'
}
start_ntpd_instance() {
local enable
validate_global_section || {
return 1
}
if [ "$enable" != 1 ]; then
return 1
fi
enable_client_sec=$(uci -q show ntp | grep enable_client=\'1\' | cut -d'.' -f 2)
local enable_client iburst version peer minpoll maxpoll client_mode server
if [ -n $enable_client_sec ]; then
validate_client_section $enable_client_sec || {
return 1
}
else
enable_client=0
fi
local enable_server server_mode ttl interface
validate_server_section || {
return 1
}
[ "$enable_client" = 0 ] && [ "$enable_server" = 0 ] && return
mkdir -p "$(dirname "$config_file")"
trunc
emit "driftfile /var/lib/ntp/ntp.drift\n"
str1="restrict -4 default noserve"
str2="restrict -6 default noserve"
if [ "$enable_server" != 0 ]; then
str1="restrict default limited kod nomodify notrap"
str2="restrict -6 default limited kod nomodify notrap"
fi
if [ "$enable_client" == 0 ] || [ "$peer" == 0 ]; then
str1="${str1} nopeer"
str2="${str2} nopeer"
fi
emit "${str1}"
emit "${str2}"
emit "restrict source noquery"
emit "\n# No limits for local monitoring"
emit "restrict 127.0.0.1"
emit "restrict -6 ::1\n"
if [ "$enable_client" != 0 ]; then
if [ "$client_mode" = "Broadcast" ]; then
emit "broadcastclient\n"
elif [ "$client_mode" = "Multicast" ]; then
emit "multicastclient 224.0.1.1 minpoll $minpoll maxpoll $maxpoll version $version\n"
elif [ "$client_mode" = "Manycast" ]; then
emit "manycastclient 224.0.1.1 minpoll $minpoll maxpoll $maxpoll version $version\n"
else
for i in ${server//,/ }
do
str="server $i minpoll $minpoll maxpoll $maxpoll version $version"
if [ "$iburst" != 0 ]; then
str="${str} iburst"
fi
emit "${str}"
done
if [ "$peer" != 0 ]; then
for i in ${server//,/ }
do
str="peer $i minpoll $minpoll maxpoll $maxpoll version $version"
if [ "$iburst" != 0 ]; then
str="${str} iburst"
fi
emit "${str}"
done
fi
fi
fi
emit ""
if [ "$enable_server" != 0 ]; then
if [ "$server_mode" = "Broadcast" ] && [ -n "$interface" ]; then
ip=$(ubus call network.interface dump | jsonfilter -e "@.interface[@.interface='$interface']['ipv4-address'][0]['address']")
mask=$(ubus call network.interface dump | jsonfilter -e "@.interface[@.interface='$interface']['ipv4-address'][0]['mask']")
if [ -n "$ip" ] && [ -n "$mask" ]; then
pref=$(( $mask / 8 ))
bcast_ip=$(echo $ip | cut -d. -f1-$pref)
for i in `seq $pref 3`; do
bcast_ip=$bcast_ip".255"
done
str="broadcast $bcast_ip"
if [ -n "$ttl" ]; then
str="${str} ttl ${ttl}"
fi
emit "${str}"
fi
elif [ "$server_mode" = "Multicast" ]; then
str="broadcast 224.0.1.1"
if [ -n "$ttl" ]; then
str="${str} ttl ${ttl}"
fi
emit "${str}"
elif [ "$server_mode" = "Manycast" ]; then
emit "manycastserver 224.0.1.1"
fi
emit ""
if [ -n "$interface" ]; then
local loopback=$(ubus call network.interface dump | jsonfilter -e "@.interface[@.interface='loopback']['device']")
local l3_intf=$(ubus call network.interface dump | jsonfilter -e "@.interface[@.interface='$interface']['device']")
local saw_lo=
emit "interface listen $l3_intf"
[ "$l3_intf" = "$loopback" ] && saw_lo=1
[ -z "$saw_lo" ] && emit "interface listen $loopback"
emit ""
fi
fi
if [ -d "/etc/ntpd.d" ]; then
local entry
for entry in "/etc/ntpd.d"/*.conf; do
emit "includefile ${entry}\n"
done
fi
if [ -d "/tmp/ntpd.d" ]; then
local entry
for entry in "/tmp/ntpd.d"/*.conf; do
emit "includefile ${entry}\n"
done
fi
mkdir -p /var/lib/ntp
chown -R ntp:ntp /var/lib/ntp
procd_open_instance
procd_set_param command $PROG -g -u ntp:ntp -p /var/run/ntpd.pid -n \
-c $config_file
procd_close_instance
procd_open_instance
procd_set_param command $HOTPLUG_HELPER
procd_close_instance
}
start_service() {
start_ntpd_instance
}
reload_service() {
stop
start
}
service_triggers() {
procd_add_reload_trigger "ntp"
local enable_server server_mode ttl interface
validate_server_section || {
return 1
}
if [ "$enable_server" != 0 ] && [ "$server_mode" = "Broadcast" ] && [ -n "$interface" ]; then
procd_open_trigger
procd_add_interface_trigger "interface.*.up" $interface /etc/init.d/ntp restart
procd_close_trigger
fi
}

View File

@@ -0,0 +1,75 @@
#!/bin/sh
ntpd_config=$(uci -q get system.ntp)
if [ -n "${ntpd_config}" ]; then
rm -rf /etc/config/ntp
touch /etc/config/ntp
global_section=$(uci -q add ntp global)
uci -q rename ntp."${global_section}"="global"
uci -q set ntp.global.enable="1"
client_section=$(uci -q add ntp timeclient)
uci -q rename ntp."${client_section}"="client"
client_enable=$(uci -q get system.ntp.enabled)
if [ $client_enable -eq 0 ]; then
uci -q set ntp.client.enable_client="0"
else
uci -q set ntp.client.enable_client="1"
fi
uci -q set ntp.client.iburst="1"
uci -q set ntp.client.version="4"
uci -q set ntp.client.peer="0"
uci -q set ntp.client.minpoll="6"
uci -q set ntp.client.maxpoll="10"
uci -q set ntp.client.client_mode="Unicast"
servers=$(uci -q get system.ntp.server)
serv=""
for server in $servers; do
if [ -z "${serv}" ]; then
serv="${server}"
else
serv="${serv},${server}"
fi
done
uci -q set ntp.client.server=${serv}
client_section=$(uci -q add ntp timeclient)
uci -q rename ntp."${client_section}"="dhcp_driven"
uci -q set ntp.dhcp_driven.enable_client="0"
uci -q set ntp.dhcp_driven.iburst="1"
uci -q set ntp.dhcp_driven.version="4"
uci -q set ntp.dhcp_driven.peer="0"
uci -q set ntp.dhcp_driven.minpoll="6"
uci -q set ntp.dhcp_driven.maxpoll="10"
uci -q set ntp.dhcp_driven.client_mode="Unicast"
uci -q set ntp.dhcp_driven.client_interface="wan"
uci -q set ntp.dhcp_driven.client_alias="DHCP-driven"
server_section=$(uci -q add ntp timeserver)
uci -q rename ntp."${server_section}"="server"
server_enable=$(uci -q get system.ntp.enable_server)
if [ $server_enable -eq 1 ]; then
uci -q set ntp.server.enable_server="1"
else
uci -q set ntp.server.enable_server="0"
fi
uci -q set ntp.server.server_mode="Unicast"
uci -q set ntp.server.ttl="255"
uci -q commit ntp
uci -q batch <<-EOT
delete system.ntp
commit system
EOT
fi
exit 0